面试题 17.10. 主要元素投票算法 C++

Posted ai52learn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题 17.10. 主要元素投票算法 C++相关的知识,希望对你有一定的参考价值。

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。

示例 1:

输入:[1,2,5,9,5,9,5,5,5]
输出:5
示例 2:

输入:[3,2]
输出:-1
示例 3:

输入:[2,2,1,1,1,2,2]
输出:2

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        //投票算法,第一次遍历找到候选值,第二次遍历判断候选值是否满足条件
        int c=-1,cnt = 0;
        for(int i = 0;i<nums.size();i++)
        {
            if(cnt==0)
            {
                c = nums[i];
                cnt = 1;
                continue;
            }
            if(nums[i]!=c)
            {
                cnt--;
            }
            else cnt++;
        }
        cnt = 0;
        for(int i =0 ; i<nums.size();i++)
        {
            if(nums[i]==c) cnt++;
        }
        return cnt>nums.size()/2?c:-1;
    }
};

以上是关于面试题 17.10. 主要元素投票算法 C++的主要内容,如果未能解决你的问题,请参考以下文章

面试题 17.10. 主要元素

LeetCode 面试题 17.10 主要元素[摩尔投票法] HERODING的LeetCode之路

LeetCode面试题 17.10. 主要元素/最优二叉树II(树形DP)/NC73数组中出现次数超过一半的数字/229. 求众数 II/NC134股票(无限次交易)/NC114旋转字符串

多数投票算法(Majority Vote Algorithm)

《程序员面试金典(第6版)》面试题 08.04. 幂集(回溯算法,位运算,C++)不断更新

[E摩尔投票] lc169. 多数元素(多数投票算法+经典)