其实这道题看起来适合HashMap做。不过仔细理解里面蕴含的规律会发现,只要找到数组里面的重复元素即可。
public static int repeatedNTimes1(int[] A) {//38ms
int len =A.length;
HashMap<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < A.length; i++) {
if(!map.containsKey(A[i]))
map.put(A[i],1);
else
map.put(A[i],map.get(A[i])+1);
if(map.get(A[i])==len/2)
return A[i];
}
return 1;
}
public static int repeatedNTimes(int[] A) {//32ms
Map<Integer, Integer> count = new HashMap();
for (int x: A) {
count.put(x, count.getOrDefault(x, 0) + 1);
}
for (int k: count.keySet())
if (count.get(k) > 1)
return k;
throw null;
}
public int repeatedNTimes4(int[] A) {//1ms
String str = "";
for (int i = 0; i < A.length; i++){
if (str.contains(A[i]+"")){
return A[i];
}else{
str += A[i];
}
}
return 0;
}