• LeetCode(169)Majority Element and Majority Element II


    一个数组里有一个数重复了n/2多次,找到

    思路:既然这个数重复了一半以上的长度,那么排序后,必然占据了 a[n/2]这个位置。

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

    线性解法:投票算法,多的票抵消了其余人的票,那么我的票一定还有剩的。

    int majority;
        int cnt = 0;
        for(int i=0; i<num.size(); i++){
            if ( cnt ==0 ){
                majority = num[i];
                cnt++;
            }else{
                majority == num[i] ? cnt++ : cnt --;
                if (cnt >= num.size()/2+1) return majority;
            }
        }
        return majority;
    

      

    Majority Element II:

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.

    思路:

    窗口(n/3)检查算法。先排序,然后用一个长度为n/3的窗口来检查两端的数是否相等。

    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
            vector<int> res;
            int maj_ele;
            int len=nums.size();
            sort(nums.begin(),nums.end());
            int index=0;
            while(index<len)
            {
                maj_ele = nums[index];
                if(maj_ele == nums[index+len/3])
                {
                    res.push_back(maj_ele);
                    while(index<len && maj_ele == nums[++index])
                    ;
                }
                else
                {
                    
                    index++;
                }
            }
            return res;
        }
    };
  • 相关阅读:
    NLP(二十九)一步一步,理解Self-Attention
    树莓派4B踩坑指南
    树莓派4B踩坑指南
    树莓派4B踩坑指南
    【2020.4.17】发现GitHub图片又裂了
    右键管理-干掉多余又删不掉的access
    Python format参数中的列表和元组可以使用“*”
    树莓派4B踩坑指南
    树莓派4B踩坑指南
    树莓派4B踩坑指南
  • 原文地址:https://www.cnblogs.com/yanqi110/p/4966535.html
Copyright © 2020-2023  润新知