https://r1cky.pixnet.net/blog/post/47950804
https://r1cky.pixnet.net/blog/post/47950804
ㄨㄚˊ 加強測資後變TLE
https://r1cky.pixnet.net/blog/post/47950804
ㄨㄚˊ 加強測資後變TLE
這題測資比較大 在讀取資料的時候 普通的 readLine().split(" ") 會不夠快
BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bur.readLine());
String[] nums = bur.readLine().split(" ");
int[] arr = new int[n];
for(int i = 0; i < n; i++)
arr[i] = Integer.parseInt(nums[i]);
nums = bur.readLine().split(" ")
這題如果這樣寫 1.5秒過了 測資都還沒讀完
可以換個方式
public static BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
public static int readInt()throws IOException{
int n = 0, tmp = bur.read();
while(tmp > 47 && tmp < 58){
n *= 10;
n += (tmp & 15);
tmp = bur.read();
}
return n;
}
這樣讀取會快上取多 所占用的空間也比較小
這題我沒試過用StringTokenizer 不過估計速度會介於兩者之間
第三行的數值(N 個正整數 y) 不需要儲存起來 可以先宣告一個
int ans = 0;
當作x陣列(第二行的 N 個正整數 x)的標記 如果讀取進來的數字大於x[ans] 就將 ans 加一 然後讀取下一個數字進行比較
如果沒有大於x[ans] 就直接讀取下一個數字進行比較
當N個數字都讀取完之後 ans 即為答案
時間和記憶體限制調整了,用BufferedReader的readLine()搭配split(" ")就可以AC了
https://r1cky.pixnet.net/blog/post/47950804
ㄨㄚˊ 加強測資後變TLE
這題測資比較大 在讀取資料的時候 普通的 readLine().split(" ") 會不夠快
BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bur.readLine());
String[] nums = bur.readLine().split(" ");
int[] arr = new int[n];
for(int i = 0; i < n; i++)
arr[i] = Integer.parseInt(nums[i]);
nums = bur.readLine().split(" ")
這題如果這樣寫 1.5秒過了 測資都還沒讀完
可以換個方式
public static BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
public static int readInt()throws IOException{
int n = 0, tmp = bur.read();
while(tmp > 47 && tmp < 58){
n *= 10;
n += (tmp & 15);
tmp = bur.read();
}
return n;
}
這樣讀取會快上取多 所占用的空間也比較小
這題我沒試過用StringTokenizer 不過估計速度會介於兩者之間
第三行的數值(N 個正整數 y) 不需要儲存起來 可以先宣告一個
int ans = 0;
當作x陣列(第二行的 N 個正整數 x)的標記 如果讀取進來的數字大於x[ans] 就將 ans 加一 然後讀取下一個數字進行比較
如果沒有大於x[ans] 就直接讀取下一個數字進行比較
當N個數字都讀取完之後 ans 即為答案
感謝,學到了新知識,原來可以用類似讀取字元的方式讀這種測資,我那時以為BufferedReader的readLine跟split就夠快了。
https://r1cky.pixnet.net/blog/post/47950804
ㄨㄚˊ 加強測資後變TLE
這題測資比較大 在讀取資料的時候 普通的 readLine().split(" ") 會不夠快
BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bur.readLine());
String[] nums = bur.readLine().split(" ");
int[] arr = new int[n];
for(int i = 0; i < n; i++)
arr[i] = Integer.parseInt(nums[i]);
nums = bur.readLine().split(" ")
這題如果這樣寫 1.5秒過了 測資都還沒讀完
可以換個方式
public static BufferedReader bur = new BufferedReader(new InputStreamReader(System.in));
public static int readInt()throws IOException{
int n = 0, tmp = bur.read();
while(tmp > 47 && tmp < 58){
n *= 10;
n += (tmp & 15);
tmp = bur.read();
}
return n;
}
這樣讀取會快上取多 所占用的空間也比較小
這題我沒試過用StringTokenizer 不過估計速度會介於兩者之間
第三行的數值(N 個正整數 y) 不需要儲存起來 可以先宣告一個
int ans = 0;
當作x陣列(第二行的 N 個正整數 x)的標記 如果讀取進來的數字大於x[ans] 就將 ans 加一 然後讀取下一個數字進行比較
如果沒有大於x[ans] 就直接讀取下一個數字進行比較
當N個數字都讀取完之後 ans 即為答案
現在AC了