【剑指offer-解题系列(29)】数组中出现次数超过一半的数
来源:互联网 发布:删除不了windows.old 编辑:程序博客网 时间:2024/05/19 14:18
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
分析
采用网上大家建议的方法,也就是使用计数器+储存值的方法,一旦计数器为0,那就把储存值变成现在的数字,这个方法只能解决这个序列一定有该数字存在的情况下的结果,如果这个数字不存在,这个算法就不能得出正确的结果,所以还需要再重新遍历一次数组,看这个最后的储存值是不是出现了一半以上。
代码实现
int MoreThanHalfNum_Solution (vector<int> numbers) {
int value = 0;
int count = 0;
for(int i =0;i<numbers.size();i++ ){
if(count == 0){
value = numbers[i];
count++;
}
else if(value == numbers[i]){
count++;
}
else {
count--;
}
}
int times=0;
for(int i =0;i<numbers.size();i++ ){
if(value==numbers[i]){
times++;
}
}
if(times>numbers.size()/2)
return value;
else
return 0;
}
- 【剑指offer-解题系列(29)】数组中出现次数超过一半的数
- 剑指offer--数组中出现次数超过一半的数
- 剑指offer 数组中出现次数超过一半的数
- 剑指offer系列之二十七:数组中出现次数超过一半的数
- 剑指Offer系列-面试题29:数组中出现次数超过一半的数字
- 算法系列——数组中出现次数超过一半的数字(剑指offer)
- 剑指offer--数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 【剑指Offer】数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- [剑指offer]数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指offer|数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- Java _ I/O
- org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 1 in
- USACO-Section1.1 Friday the Thirteenth[日期]
- SIP协议
- 初识HTML
- 【剑指offer-解题系列(29)】数组中出现次数超过一半的数
- GTK3.0学习第三天---图片GtkImage
- 自定义控件小总结
- BUSINESS NETWOKING
- 最大似然参数估计
- mysql使用select into from 提示 Undeclared variable
- 解决ubuntu无法修改分辨率为1920*1080问题
- MySQL日期和时间类型
- Day3