此算法名为摩尔投票法
我们使用两个变量,val表示当前这个数,cnt表示这个数出现了多少次
从前往后遍历,每次遇到一个数,若cnt=0,则把cnt置为1,把val置为这个数;如果cnt不为0的话,如果当前数nums[i]与val相同,就把cnt++;如果当前数nums[i]与val不同,就把cnt--
走到最后时,val存的就是要求的那个数
class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums) {
int cnt = 0, val = -1;
for (auto x : nums)
{
if (!cnt) val = x, cnt = 1;
else
{
if (x == val) cnt ++;
else cnt --;
}
}
return val;
}
};