【题目】 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。请你找到并返回这个整数 【示例】 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 【提示】 1 <= arr.length <= 10^4 0 <= arr[i] <= 10^5 【代码】 一次遍历,效率略低
class Solution { public: int findSpecialInteger(vector<int>& arr) { map<int,int> m; for(auto x:arr){ m[x]++; if(m[x]>arr.size()*0.25) 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; } };