《剑指offer》-数组中出现次数超过一半的数字
2016-05-23 19:54
281 查看
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解法:先排序,然后再从头开始统计个数。注意统计的时候从1开始。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int len = numbers.size();
int half = len / 2;
sort(numbers.begin(), numbers.end());
for(int i = 0; i < len; i++) {
int count = 1;
int newNum = numbers[i];
int j = 1;
while((i+1) < len && newNum == numbers[i+1]) {
count++;
newNum = numbers[i+1];
++i;
j = 0;
}
if(j == 0) i--; //为了防止在while里面的多加1,退回去
if(count > half) return newNum;
}
return 0;
}
};
相关文章推荐
- Node.js简介
- 剑指Offer——表示数值的字符串
- nodejs完整登陆交互
- js制作淘宝放大镜效果
- nodejs模拟get,post 进行字符统计功能
- jquery ajax处理后端传回数据
- Angular 怎么在加载中加入 Loading 提示框
- js中通过javascriptbBridge调用客户端方法
- 锋利的jQuery之事件
- JSP自定义标记
- css垂直和水平居中显示
- JQuery开发1-显示或者影藏网页部分内容
- AngularJs(二)设计思想和常用功能
- jquery 获取select数组与name数组长度
- JavaScript闭包中的this
- UnsafeMutablePointer<CGPoint> 转化为CGPoint
- Js中的空值判断
- 关于JS面向对象的问题一
- [Effective JavaScript 笔记]第15条:当心局部块函数声明笨拙的作用域
- css垂直居中