题目描述
思路分析
经典思维题+模拟。
如果当前数和now不同,则cnt–(可以视为消耗了一票);如果cnt==0(被消耗完了),则now=当前数。则最后数一定是答案。
证明:如果最后正确答案是t,假设最后答案不是t,则必存在cnt[t]个不同的数把t消耗掉,因为cnt[t]超过总个数的一半,故矛盾!
代码实现
class Solution {
public:
int majorityElement(vector<int>& nums) {
int now=0,cnt=0;//r:当前数,c:当前数量
for(auto x:nums){
if(cnt==0) now=x,cnt++;
else if(now==x) cnt++;
else cnt--;
}
return now;
}
};