剑指Offer——数组中出现次数超过一半的数字
2024-08-24 17:55:07
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
分析:
主元素问题。只要每次都从数组中移除两个不相同的数值,
如果有出现的次数超过数组长度的一半的数,那么就是最后剩下来的那个。
最后再检验一次是否有这样的数。
代码:
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
// 从数组中移除两个不相同的数值,如果有出现的次数超过数组长度的一半的数,那么就是最后剩下来的那个
int numSize = numbers.size();
int candidate = ; // 候选数,可能是出现的次数超过数组长度的一半的数
int cnt = ; // 标记当前的候选数没被抵消的次数
for(int i = ; i < numSize; i++) {
if(cnt == ) candidate = numbers[i]; // 重选候选数
if(candidate == numbers[i]) cnt++; // 次数加1
else cnt--; // 次数减1
}
cnt = ;
for(int i = ; i < numSize; i++) // 检验
if(numbers[i] == candidate)
cnt++;
if(cnt * <= numSize) return ;
return candidate;
}
};
最新文章
- Linux下NFS服务器的搭建与配置
- if转换switch的小技巧
- SpringMVC整合TaskExecutor线程池的配置/使用
- 26个Jquery使用小技巧
- (转)SSI开发环境搭建
- UVa 10256 (判断两个凸包相离) The Great Divide
- django是怎么处理请求的
- css如此强大你知道吗
- Android:源码环境编译自定义的APP到ROM(System Image)中
- Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及
- Zookeeper增删改查
- ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
- grid - 通过网格区域命名和定位网格项目
- 刘志梅2017710101152.《面向对象程序设计(java)》第一周学习总结
- python3 re.compile中含有变量
- javascript对文件的读写
- python中字典的用法
- Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
- swift 移除所有子控件
- jquery ajax 获取 json 文件数据
热门文章
- CSS布局奇淫技巧之--各种居中<;转>;
- No output operations registered, so nothing to execute
- EasyUI 创建对话框
- 解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误
- 更新加子查询加相同的表解决办法 mysql
- 面向对象方法的重载(overloading)和覆盖(overriding)
- Unity UGUI 实现简单拖拽功能
- PyQt5资料
- JavaScript设计模式——观察者模式
- CENTOS --5分钟搞定Nginx安装的教程