【简单】给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数
示例:
输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6
提示:
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5
解法一:
public int m1(int[] arr) {
int target = 0;
int start = 0;
int x = arr.length / 4;//25%
for (int i = 0; i < arr.length; i++) {
if (arr[i] != target) {
start = i;
target = arr[i];
}
if (i - start + 1 > x)
return target;
}
return target;
}
解法二:
public int m2(int[] arr) {
int threshold = arr.length / 4;//25%
for (int i = 0; i < arr.length; i++) {
if(arr[i + threshold] == arr[i])
return arr[i];
}
return 0;
}
解法三:哈希映射
Map<Integer, Integer> map = new HashMap();
for(int i : arr){//先把数组中的数据存放在map中,key为元素值,value为出现的次数
map.put(i, map.getOrDefault(i, 0) + 1);
}
for(int key : map.keySet()){
Integer value = map.get(key);
if(value > arr.length / 4){//如果有满足的及时输出
return key;
}
}
return -1;