题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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;
}
};

最新文章

  1. Linux下NFS服务器的搭建与配置
  2. if转换switch的小技巧
  3. SpringMVC整合TaskExecutor线程池的配置/使用
  4. 26个Jquery使用小技巧
  5. (转)SSI开发环境搭建
  6. UVa 10256 (判断两个凸包相离) The Great Divide
  7. django是怎么处理请求的
  8. css如此强大你知道吗
  9. Android:源码环境编译自定义的APP到ROM(System Image)中
  10. Vue.js 运行环境搭建详解(基于windows的手把手安装教学)及vue、node基础知识普及
  11. Zookeeper增删改查
  12. ORACLE--Connect By、Level、Start With的使用(Hierarchical query-层次查询)
  13. grid - 通过网格区域命名和定位网格项目
  14. 刘志梅2017710101152.《面向对象程序设计(java)》第一周学习总结
  15. python3 re.compile中含有变量
  16. javascript对文件的读写
  17. python中字典的用法
  18. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法
  19. swift 移除所有子控件
  20. jquery ajax 获取 json 文件数据

热门文章

  1. CSS布局奇淫技巧之--各种居中&lt;转&gt;
  2. No output operations registered, so nothing to execute
  3. EasyUI 创建对话框
  4. 解决Maven项目 Missing artifact jdk.tools:jdk.tools:1.7的错误
  5. 更新加子查询加相同的表解决办法 mysql
  6. 面向对象方法的重载(overloading)和覆盖(overriding)
  7. Unity UGUI 实现简单拖拽功能
  8. PyQt5资料
  9. JavaScript设计模式——观察者模式
  10. CENTOS --5分钟搞定Nginx安装的教程