其他分享
首页 > 其他分享> > 剑指offer(39)

剑指offer(39)

作者:互联网

剑指offer(39)

剑指 Offer 39. 数组中出现次数超过一半的数字

难度简单279

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

限制:

1 <= 数组长度 <= 50000

1.排序后取中值

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        return nums[n/2];
    }
};

2.摩尔投票

原理就是把众数全记为+1,其余记为-1,他们的和必定大于0;因此遍历数组,先假设第1个数是众数,如果和小于0,那么就更换众数

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        
        int majority=-1;
        int cnt=0;
        for(int i=0;i<nums.size();i++){
            if(nums[i]==majority){
                cnt++;
            }else{
                cnt--;
            }
            if(cnt<0){
                majority=nums[i];
                cnt=1;
            }
        }
        return majority;
    }
};

标签:39,nums,int,offer,数组,众数,public
来源: https://www.cnblogs.com/BailanZ/p/16217655.html