您的位置:首页 > 其它

AcWing 52 数组中出现次数超过一半的数字

2019-03-10 09:48 148 查看

题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。假设数组非空,并且一定存在满足条件的数字。

样例

[code]输入:[1,2,1,1,3]

输出:1

分析:

有趣的问题。采用两个变量存储中间状态,val表示可能的解,cnt表示其出现的次数。

初始val取第一个数,cnt为1;继续向后扫描,如果扫到的元素值与val相等,则cnt++;否则判断cnt是否为0,是则val换人,不是则cnt--。这样到结尾,由于所求的元素出现次数超过一半,最后的获胜者一定是它。

[code]class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums) {
int val = nums[0],cnt = 1;
for(int i = 1;i < nums.size();i++){
if(nums[i] == val)  cnt++;
else{
if(!cnt)    val = nums[i];
else    cnt--;
}
}
return val;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: