이 메서드는 배열 크기의 절반 이상인 경우 양의 정수 배열에서 숫자를 반환하고 그렇지 않으면 -1을 반환합니다. 더 큰 배열 (10^5<size<10^8)
의 실행 시간을 향상시켜야합니다. 어떤 제안?자바 코드의 속도를 높이는 방법은 무엇입니까?
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/)이 아닙니다. –
또한 코드는 O (n) 시간에 실행됩니다. 그것은 정확히 천천히 아닙니다. – supersam654
(i) containsKey + get 대신에 하나의'get'을 사용하여'null'과 비교하십시오 (ii) 첫 번째 루프에서 가장 높은 숫자를 추적하고 두 번째 루프를 제거하십시오. (iii) 시작할 맵의 크기를 지정하십시오 많은 rehashing 연산을 피한다. – assylias