给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数
示例:
输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6
提示:
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5
================================================================================================================================================================================================================================================================================================================================================================================================
分析:
法一:常规统计,统计某个元素出现的次数大于25%即可。
class Solution {
public int findSpecialInteger(int[] arr) {
int count = 0; //统计次数
int data = arr[0];
for(int i=0;i<arr.length;i++){
if(arr[i] == data){
count++;
if(count * 4 > arr.length){
return data;
}
}else{
data = arr[i];
count = 1;
}
}
return -1;
}
}
法二:贴一个别人的解法
思路:
- 根据arr.length找到超过25%处的下标
- 保持固定距离(25%个数)
- 如若两个指针所指的数相等及为所求class Solution { public int findSpecialInteger(int[] arr) { int before = arr.length / 4; for(int i = 0; before < arr.length; i++, before++){ if(arr[i] == arr[before]) { return arr[i]; } } return -1; } }
参考:https://leetcode-cn.com/problems/element-appearing-more-than-25-in-sorted-array/