{1,2,3,2,2,2,5,4,2}
。由于数字2
在数组中出现了5次,超过数组长度的一半,因此输出2
。如果不存在则输出0
。
下面的思路来自《剑指offer》,思路的名字是我自己起的。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int length = numbers.size();
if(length==0) return 0;
// 调用标准库的快速排序算法,面试的时候可能要自己写
sort(numbers.begin(), numbers.end());
int middle = numbers[length>>1];
int times=0;
// 下面这种统计次数的方法可以不用判断后面的数字,但仅限于先排序的方法
int i=0;
while(numbers[i] != middle){
i++;
}
for(; i<length; i++){
if(numbers[i] != middle) break;
times++;
}
return (times > length>>1) ? middle:0;
}
};
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int length = numbers.size();
if(length==0) return 0;
int result = numbers[0];
int times=1;
for(int i=1; i<length; i++){
if(times==0) {
result = numbers[i];
times = 1;
continue;
}
if(numbers[i]==result) times++;
else times--;
}
times = 0;
for(int i=0; i<length; i++)
if(numbers[i]==result) times++;
return (times > length>>1) ? result:0;
}
};
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- hzar.cn 版权所有 赣ICP备2024042791号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务