题目
其实我也不会证明,也不想去证明呜呜,但直觉就是对的,我怎么可以这么不严谨!
看代码就懂了:
假如众数是x:
- x在前面出现的次数少,众数是它的话,后面ans一定会更新成x的。
- x在前面出现的次数多,可能x不会被替换,x即使被替换了,后面ans一定会替换成x的,因为x是众数鸭。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int ans=nums[0],cnt=1,n=nums.size();
for(int i=1;i<n;++i){
cnt+=(nums[i]==ans?1:-1);
if(cnt<0) ans=nums[i],cnt=1;
}
cnt=0;
for(int i=0;i<n;++i) if(nums[i]==ans) ++cnt;
return cnt>n/2?ans:0;//判断存不存在众数 不过题目说了肯定存在
}
};