从找多数元素题理解摩尔投票法

目录

先看题目:LeetCode169.多数元素

思路一:哈希表法

思路二:中位数法

思路三:摩尔投票法


先看题目:LeetCode169.多数元素

从找多数元素题理解摩尔投票法_第1张图片

思路一:哈希表法

顺便提一句,如果提前指定了数组中元素,可以使用木桶法,但是这里不适用,只能老老实实用哈希表

class Solution {
public:
    int majorityElement(vector& nums) {
        map m;
        for(int i=0;inums.size()/2)
                return nums[i];
        }
        return 0;
    }
};

思路二:中位数法

先将其排序,排序后的中位数一定是众数

//时间O(nlogn),空间O(1)
class Solution {
public:
    int majorityElement(vector& nums) {
        sort(nums.begin(), nums.end());
        return nums[nums.size()/2];
    }
};

思路三:摩尔投票法

可以理解为极限一换一

每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个

证明的话涉及数论,就不证明了……

class Solution {
public:
    int majorityElement(vector& nums) {
        int res = 0, count = 0;
        for(int i = 0; i

 

你可能感兴趣的:(算法笔记—数学)