• leetcode 求众数


    给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

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

    示例 1:

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/majority-element

    算法一:两重循环枚举,最坏时间复杂度为$n^2$ (过不了

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            int n=nums.size();
            int res=0;
            for(int i=0;i<n;++i){
                int num=nums[i];
                int ans=0;
                for(int j=0;j<n;++j){
                    if(num==nums[j])ans++;
                }
                if(ans>n/2){
                    res=num;
                    break;
                }
            }
            return res;
        }
    };
    

    算法二:哈希表存储个数,复杂度为n

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            unordered_map<int,int> m;
            int res=0;
            int n=nums.size();
            for(int i=0;i<n;++i){
                m[nums[i]]++;
            }
            for(auto t:m){
                if(t.second>n/2)res=t.first;
            }
            return res;
        }
    };
    

    算法三:摩尔投票法(核心思想:遍历一遍记录众数,众数肯定不会被消解完,最后记录的肯定是众数,因为最坏情况也就是其他被误当为众数,而真正的众数会将count减为0,而找到真正的众数

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            int num=nums[0];//众数,先假设它是众数
            int count=1;
            for(int i=1;i<nums.size();++i){
                if(count==0){
                    num=nums[i];
                    count=1;
                }
                else if(num==nums[i]){
                    count++;
                }
                else{
                    count--;
                }
            }
            return num;
        }
    };
    
  • 相关阅读:
    Codeforces Round #358 (Div. 2)
    Codeforces Round #357 (Div. 2)
    Codeforces Round #356 (Div. 2)
    第11章例题(紫书)
    第10章例题(紫书)
    Codeforces Round #354 (Div. 2)
    2016百度之星
    BestCoder 1st Anniversary
    BestCoder Round #41
    BestCoder Round #40
  • 原文地址:https://www.cnblogs.com/clear-love/p/11339076.html
Copyright © 2020-2023  润新知