==》 传送通道
再次刷到这道题,记录一下新的体悟,思路更清晰了。
class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums) {
int cnt = 1, res = nums[0];
for(int i = 1; i < nums.size(); ++ i)
{
if(!cnt) res = nums[i];
if(nums[i] == res) cnt ++;
else cnt --;
// if(!cnt) res = nums[i];
/*
if不能放在这个位置
解释:如果cnt == 0的时候,res 记录的就是最后一个已经比较的数
如: [1, 2, 1] 当比较2比较完后,res 将记录 2,即 res = 2。
由于在比较到 2 时候,cnt == 0 说明从开始到此位置[0, k],没有一个数超过[0, k]区间的一半
那就肯定不超过整个区间一半,所以[0, k]区间的数都可以pass,只考虑[k + 1, end]区间数
*/
}
return res;
}
};