#4268: 有人用JAVA寫出這題嗎?


tomoyaken14 (歐練)

學校 : 不指定學校
編號 : 6922
來源 : [211.23.251.161]
最後登入時間 :
2025-09-23 09:30:30

用了二元搜尋法還是逾時三秒

還有更快的方法嗎??

感謝...微笑

#4270: Re:有人用JAVA寫出這題嗎?


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07

用了二元搜尋法還是逾時三秒

還有更快的方法嗎??

感謝...微笑


話說我不是用JAVA寫的

但是我的方法應該比較快

就是兩個陣列都從頭開始跑

看哪個數字比較小就移往下一個數字

如果兩邊一樣就答案+1

兩邊同時移往下一個數字

這樣大概執行n次左右

比你的 nlgn 快

#4274: Re:有人用JAVA寫出這題嗎?


tomoyaken14 (歐練)

學校 : 不指定學校
編號 : 6922
來源 : [211.23.251.161]
最後登入時間 :
2025-09-23 09:30:30

用了二元搜尋法還是逾時三秒

還有更快的方法嗎??

感謝...微笑


話說我不是用JAVA寫的

但是我的方法應該比較快

就是兩個陣列都從頭開始跑

看哪個數字比較小就移往下一個數字

如果兩邊一樣就答案+1

兩邊同時移往下一個數字

這樣大概執行n次左右

比你的 nlgn 快

感謝回答

小弟我再試試看~



 

#5059: Re:有人用JAVA寫出這題嗎?


Kaitang (凱)

學校 : 國立屏東大學
編號 : 5159
來源 : [163.24.254.195]
最後登入時間 :
2013-10-22 15:10:17

用上面大大提供的方法 應該是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);

}

}

}

 

#5060: Re:有人用JAVA寫出這題嗎?


past (遺憾的臭氧)

學校 : 臺北市立麗山高級中學
編號 : 8381
來源 : [111.250.64.129]
最後登入時間 :
2012-06-04 13:50:45

用上面大大提供的方法 應該是n沒錯 但還是tle

//d478: 共同的數 - 簡易版

import java.util.Scanner;

Java 的話不要用 Scanner 類別
#5729: Re:有人用JAVA寫出這題嗎?


wemee (阿勇)

學校 : 國立北港高級中學
編號 : 4621
來源 : [220.135.3.103]
最後登入時間 :
2025-09-25 14:43:41

用上面大大提供的方法 應該是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(); 收集垃圾指令

就可以了