当前位置: 首页 > news >正文

有序数组中出现次数超过25%的元素

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

请你找到并返回这个整数

示例:

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

提示:

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

题目解析:

有序数组,找到其中出现次数大于数组长度1/4的数返回

解法思路:

解法一:因为数组有序,所以直接遍历一次用len变量记录每个数出现次数,如果大于1/4则返回,时间复杂度O(N)

解法二:将数组以25%为单位分为4个部分,因为有序,所以相同的数会连续出现,又因为题目说一定有一个数出现频率大于25 %,所以这4部分的三个连接点25%、50%、75%一定会有答案出现。所以我们检查这三个位置的数,比如n/4下标位置数为x,先找到最左边的x的下标为J然后查看arr[J+n/4]是否等于x),如果相等则x符合条件返回x,如果不相等,同样的方法判断下一个连接点n/4  *2 +1。如果两个节点都不是答案,题目保证一定有答案,则直接返回最后一个节点3*n/4+2的值.

代码:
class Solution {
public:int findSpecialInteger(vector<int>& arr) {int m=arr.size()/4;for(int i:{m,m*2+1}){int x=arr[i];int j=ranges::lower_bound(arr,x)-arr.begin();if(arr[j+m]==x){return x;}}return arr[3*m+2];}
};

注意三个节点下标值的计算

http://www.dtcms.com/a/294225.html

相关文章:

  • 数字人形象视频:开启虚拟世界的全新篇章
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • IRF 真机实验
  • [AI8051U入门第八步]硬件IIC驱动AHT10温湿度传感器
  • 密码学中的概率论与统计学:从频率分析到现代密码攻击
  • 【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置
  • scikit-learn 包
  • 【后端】 FastAPI
  • AI替代人工:浪潮中的沉浮与觉醒
  • LNMP-zblog分布式部署
  • 前端/后端,前台/中台/后台概念区别
  • kafka 消费者组
  • RLVR的一种扩展方案--RLPR论文阅读
  • 负压产生电路分析
  • 新增 UART 消息 - OpenExo
  • 【markdown】 VSCode 使用 Markdown Preview Enhanced 插件转PDF
  • CSP2025模拟赛1(2025.7.23)
  • Spring DI:依赖注入全解析
  • 点击邮件详情触发事件
  • ssh-copy-id
  • 统一服务入口——Spring Cloud Gateway
  • 大模型【进阶】(四)QWen模型架构的解读
  • linux中如何清除history命令
  • 【WRF】根据自动安装脚本安装 WRF / WRF-CHEM等
  • Java学习---Spring及其衍生(上)
  • 【机器学习】组合优化问题combination-optimization概述
  • 【2025/07/23】GitHub 今日热门项目
  • AI入门学习-Python 最主流的机器学习库Scikit-learn
  • 游戏盾和传统防火墙有什么区别?
  • 可视化机器学习实验全生命周期管理工具链wandb.ai