【每日一题】力扣 1287题 有序数组中出现次数超过25%的元素
给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。
请你找到并返回这个整数
示例:
输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6
提示:
1 <= arr.length <= 10^40 <= 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; } };
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

浙公网安备 33010602011771号