用了二元搜尋法還是逾時三秒
還有更快的方法嗎??
感謝...
話說我不是用JAVA寫的
但是我的方法應該比較快
就是兩個陣列都從頭開始跑
看哪個數字比較小就移往下一個數字
如果兩邊一樣就答案+1
兩邊同時移往下一個數字
這樣大概執行n次左右
比你的 nlgn 快
用了二元搜尋法還是逾時三秒
還有更快的方法嗎??
感謝...
話說我不是用JAVA寫的
但是我的方法應該比較快
就是兩個陣列都從頭開始跑
看哪個數字比較小就移往下一個數字
如果兩邊一樣就答案+1
兩邊同時移往下一個數字
這樣大概執行n次左右
比你的 nlgn 快
感謝回答
小弟我再試試看~
用上面大大提供的方法 應該是n沒錯 但還是tle
//d478: 共同的數 - 簡易版
import java.util.Scanner;
public class d478 {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
int max = sin.nextInt();
int array = sin.nextInt();
int a[] = new int [array];
int b[] = new int [array];
for(int i=0;i<max;i++){
int ans =0;
for(int j=0;j<array;j++){
a[j] = sin.nextInt();
}
for(int j=0;j<array;j++){
b[j] = sin.nextInt();
}
for(int j=0,k=0;j<array&&k<array;){
if(a[j]==b[k]){
ans +=1;
j = j+1;
k = k+1;
}
else if(a[j]>b[k])
k = k+1;
else if(a[j]<b[k])
j = j+1;
}
System.out.println(ans);
}
}
}
用上面大大提供的方法 應該是n沒錯 但還是tle
//d478: 共同的數 - 簡易版
import java.util.Scanner;
用上面大大提供的方法 應該是n沒錯 但還是tle
//d478: 共同的數 - 簡易版
import java.util.Scanner;
public class d478 {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
int max = sin.nextInt();
int array = sin.nextInt();
int a[] = new int [array];
int b[] = new int [array];
for(int i=0;i
int ans =0;
for(int j=0;j
a[j] = sin.nextInt();
}
for(int j=0;j
b[j] = sin.nextInt();
}
for(int j=0,k=0;j
if(a[j]==b[k]){
ans +=1;
j = j+1;
k = k+1;
}
else if(a[j]>b[k])
k = k+1;
else if(a[j]
j = j+1;
}
System.out.println(ans);
}
}
}
我第一次測試AC 但是MLE:記憶體超出限制
然後加上System.gc(); 收集垃圾指令
就可以了