如果該方法出現的次數超過數組大小的一半,則返回正整數數組中的數字,否則返回-1。我需要改善其更大陣列的運行時間(10^5<size<10^8)
。有什麼建議麼?如何加快這段java代碼?
public static int findResult(int arr[],int len){
int val=0;
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<len;i++){
if(map.containsKey(arr[i])){
val = (Integer)map.get(arr[i]);
map.put(arr[i], val+1);
}else{
val=1;
map.put(arr[i], val);
}
}
Iterator<Integer> it=map.keySet().iterator();
while(it.hasNext()){
int next=it.next();
if((Integer)map.get(next)>(len/2)){
return next;
}
}
return -1;
}
這可能應該發佈到[codereview](h ttp://codereview.stackexchange.com/),不是。 – 2013-05-05 12:20:34
此外,您的代碼在O(n)時間運行。這並不是很慢。 – supersam654 2013-05-05 12:22:48
(i)而不是containsKey + get,只需使用一個'get'並與'null'比較(ii)跟蹤第一個循環中的最高數字並擺脫第二個循環(iii)調整地圖的大小以開始並避免許多重新哈希操作 – assylias 2013-05-05 12:23:10