【题目】
给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。请你找到并返回这个整数
来源:leetcode
链接:https://leetcode-cn.com/problems/element-appearing-more-than-25-in-sorted-array/
【示例】
输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6
【提示】
1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5
【代码】
【map作为辅助】
class Solution {
public:
map<int,int> m;
int findSpecialInteger(vector<int>& arr) {
int len=arr.size();
for(auto x:arr)
m[x]++;
for(auto x:m)
if(x.second>len/4)
return x.first;
return 0;
}
};
【hash数组】
class Solution {
public:
int hashnum[100001]={0};
int findSpecialInteger(vector<int>& arr) {
int len=arr.size();
for(auto x:arr){
hashnum[x]++;
if(hashnum[x]>len/4)
return x;
}
return 0;
}
};
class Solution {
public:
map<int,int> m;
int findSpecialInteger(vector<int>& arr) {
int len=arr.size();
for(auto x:arr){
m[x]++;
if(m[x]>len/4)
return x;
}
return 0;
}
};
【巧妙方法】
class Solution {
public:
int findSpecialInteger(vector<int>& arr) {
int n=arr.size();
int span=n/4+1;
for(int i=0;i<n;i+=span){
auto iter_l=lower_bound(arr.begin(),arr.end(),arr[i]);
auto iter_r=upper_bound(arr.begin(),arr.end(),arr[i]);
if(iter_r-iter_l>=span) return arr[i];
}
return -1;
}
};