【每日一题】力扣 1287题 有序数组中出现次数超过25%的元素

 

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

 

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6

 

提示:

  • 1 <= arr.length <= 10^4
  • 0 <= arr[i] <= 10^5

  思路 :数组 arr 已经排好序了,那么相同的数在 arr 中出现的位置也是连续的。因此我们可以对数组进行一次遍历,并统计每个数出现的次数。只要发现某个数出现的次数超过数组 arr 长度的 25%,那么这个数即为答案。

  在计算数组 arr 长度的 25% 时,会涉及到浮点数。我们可以用整数运算 count * 4 > arr.length 代替浮点数运算 count > arr.length * 25%,减少精度误差。

class Solution {
public:
    int findSpecialInteger(vector<int>& arr) {
      int n = arr.size();
      int cnt = arr[0],cns = 0;
      for(int i = 0;i < n;i++){
          if(arr[i] == cnt){ 
               cns++;
               if(cns * 4 > n) {
                  return cnt;
               }  
         }
           else{
               cnt = arr[i];
               cns = 1;
         }
      }
      return -1;
    }
};

 

 

 

-------------------------------------------

个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

posted @ 2020-08-10 17:50  比尔的歌  阅读(127)  评论(0)    收藏  举报