Этот метод возвращает число из массива положительных целых чисел, если оно встречается более чем в полтора раза от размера массива, -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/), а не SO. –
Кроме того, ваш код работает в O (n) времени. Это не совсем медленно. – supersam654
(i) вместо containsKey + get, просто используйте «get» и сравнивайте с «null» (ii) отслеживайте наибольшее число в первом цикле и избавляйтесь от второго цикла (iii) размер вашей карты, чтобы начать с и избегать многих операций перефразирования – assylias