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

力扣1287. 有序数组中出现次数超过25%的元素

在这里插入图片描述
这一题要我们找有序数组中次数超过25%的元素,很明显可以用哈希表在O(n)的时间复杂度下完成查找,代码如下:

class Solution {
public:int findSpecialInteger(vector<int>& arr) {int n=arr.size();int k=n/4;unordered_map<int,int> mp;for(int i=0;i<n;i++) {mp[arr[i]]++;if(mp[arr[i]]>k){return arr[i];}}    return 0; }
};

那有没有更好的做法呢?sure
首先题目上说了有序数组,那么我们是不是可以用二分?
次数超过25%的元素?是不是说明这个元素一定会在n1/4,n2/4,n*3/4处。

vector<int> candi;
candi={arr[n/4],arr[n/2],arr[n/4*3]}

结果一定在这些元素里面
那么我们是不是可以对这些元素进行一些二分,
找到每一个元素第一个大于等于该元素出现在数组中位置,和第一个小于等于该元素出现在数组中的位置,二者相减,如果长度大于n/4,就说明这个元素是符合的。
这样做的时间复杂度为O(3+log(n)+log(n)) ==O(logn)
完整代码如下:

class Solution {
public:int findSpecialInteger(vector<int>& arr) {int n=arr.size();int k=n/4;vector<int> candidates={arr[n/4],arr[n/2],arr[n*3/4]};for(int i=0;i<candidates.size();i++){int l=0;int r=n-1;int x=candidates[i];int lx=INT_MAX;int rx=-1;while(l<=r){int mid=(l+r)/2;if(x>=arr[mid]){rx=max(rx,mid);l=mid+1;}else{r=mid-1;}}l=0;r=n-1;while(l<=r){int mid=(l+r)/2;if(x<=arr[mid]){lx=min(lx,mid);r=mid-1;}else{l=mid+1;}}if(rx-lx+1>k){return x;}}return 0;}
};

注意一点在写找3/4位置时,一定要先n3/4,而不是n/43
这是因为由于整数除法会先让 n / 4 变小(向下取整),
导致结果比正确位置偏左(小了一些)。
因此我们在进行乘除运算时一定要先乘后除。

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

相关文章:

  • Linux网络与路由配置完全指南
  • 【高并发服务器】六、日志宏的实现
  • 什么是网络割接
  • 中山网站建设文化报价个人网站设计结构图
  • 专业简历制作网站推荐渭南网站建设网站排名优化
  • Electron学习(一):创建第一个应用并打包成功
  • EF Core FromExpression 方法
  • 工厂方法模式
  • 做装机u盘那个网站好市桥做网站
  • SAP MM采购对账功能分享
  • 网页设计与网站建设考试名词解释2019网站建设工作的作用
  • 【有源码】基于Python与Spark的火锅店数据可视化分析系统-基于机器学习的火锅店综合竞争力评估与可视化分析-基于用户画像聚类的火锅店市场细分与可视化研究
  • Linux: perf: sched latency,周期性抓取看趋势,做对比
  • 统计学重要思想
  • Android 本地存储方案深度解析:SharedPreferences、DataStore、MMKV 全面对比
  • 网站开发前后端中山做外贸网站
  • ElastiCache Redis 内存告警深度分析与运维实战指南
  • Spring5.3.10源码编译和调试(IDEA+Gradle)的过程
  • JS | 知识点总结 - 原型链
  • 【Docker】Docker镜像仓库
  • EEException: Geometry.area: Unable to perform this geometry operation.
  • 逻辑和共情
  • linux安装输入法
  • git连接远程仓库并拉去推送以及克隆命令
  • steam新品节游戏推荐!手机怎么玩steam游戏!
  • OpenHarmony Stage模型深度解剖:从Ability Kit到沙箱隔离的全链路底层原理
  • 基于 GEE 的 MODIS 昼夜地表温度数据可视化与导出全流程解决方案
  • 【Docker】记录一次使用docker部署dify网段冲突的问题
  • 缓存三剑客问题
  • 构建AI智能体:六十七、超参数如何影响大模型?通俗讲解原理、作用与实战示例