1、题目描述
给一个长度为n的数组,返回它的主要元素。主要元素定义是出现次数超过n/2的元素。
2、思路
声明一个答案君ans,初始化为nums[0];
声明一个计数君cnt,初始化为1,他表示ans这个数字出现的次数。现在是1次。
遍历数组,若当前数字等于ans,则cnt加1,反之cnt减1;
当cnt等于0的时候,说明在之前的这些元素中,ans和其他元素的出现的次数刚好相等。
那么,在确保一定有主要元素的情况下,只需要从后面剩下的元素中找到主要元素即可。
3、代码
int majorityElement(vector<int>& nums) {
int n = nums.size();
int ans = nums[0];
int cnt = 1;
for(int i=1;i<n;i++){
if(cnt==0){
ans=nums[i];
cnt=1;
}
else if(nums[i]==ans)
cnt++;
else
cnt--;
}
return ans;
}