[英]Find the count of similar elements in two equal-sized arrays using HashMap
我編寫了代碼來查找兩個數組中出現的公共元素的數量,但是我的輸出僅給出了我聲明的數組的大小。 誰能指出我代碼中的錯誤?
import java.io.*;
import java.util.*;
public class arreq1 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
//int t = in.nextInt();
int n = in.nextInt();
int p[] =new int[n];
int c[] =new int[n];
int count=0;
for(int i=0;i<n;i++)
p[i] = in.nextInt();
for(int k=0;k<n;k++){
c[k] = in.nextInt();
}
for(int j=0;j<p.length;j++){
hm.put(p[j],j);
if(hm.containsKey(c[j]));
count++;
}
System.out.println(count);
}
}
在if(hm...)
行的末尾有一個多余的分號。 否則,if語句僅控制空語句的執行;
而不是count++;
在下一行。
另外,您必須將last for循環拆分為兩個單獨的循環,否則它將找到部分公共元素。 例如,當j = 0時,僅當c[0] == p[0]
時才遞增計數,而如果c[0] == any p[0 .. n-1]
則不遞增計數。
其他一些改進:您可以使用HashSet代替HashMap。 您還可以使用其他java集合實用程序為您完成艱苦的工作,例如(未經測試):
import java.io.*;
import java.util.*;
public class arreq1 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
Set<Integer> ps = new HashSet<Integer>();
List<Integer> cl = new ArrayList<Integer>();
//int t = in.nextInt();
int n = in.nextInt();
int p[] =new int[n];
int c[] =new int[n];
int count=0;
for(int i=0;i<n;i++)
p[i] = in.nextInt();
for(int k=0;k<n;k++){
c[k] = in.nextInt();
}
for(int j=0;j<p.length;j++){
ps.add(p[j]);
cl.add(c[j]);
}
// remove entries in cl that do not exist in ps
cl.retainAll(ps);
count = cl.size();
System.out.println(count);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.