美文网首页
2020-03-13 刷题1 (数组)

2020-03-13 刷题1 (数组)

作者: nowherespyfly | 来源:发表于2020-03-14 11:09 被阅读0次

169 多数元素

标签:数组,众数
一共n个元素,其中出现了大于n/2次的元素被称为众数,给定数组中一定存在众数,把这个数找出来。

比较好想的方法包括,哈希表计数法,排序然后找第n/2+1的元素。有点tricky的方法就是摩尔投票法:

那么设置一个candidate以及其获得票数count,如果count为0,那么当前遍历到的元素就可以作为candidate并获得一票;如果count不为0,并且当前元素与candidate相同,再获得一票;不相等,则减掉一票。最后遍历完这个数组,candidate就一定是众数。

假设一共有2n+1个元素,其中众数a有n+1个,剩下的元素全为b(这是最坏的情况)。如果第一个元素是a,那么它一共可以获得支持票n+1,反对票n,最后必然剩下一票。而如果剩下的元素不全相等,它们内部就可以互相投反对票,a最终剩下的支持票就会更多。

上面是奇数个元素的情况,如果是偶数个的情况,剩下的支持票也会更多。

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

相关文章

  • 2020-03-13 刷题1 (数组)

    169 多数元素 标签:数组,众数一共n个元素,其中出现了大于n/2次的元素被称为众数,给定数组中一定存在众数,把...

  • [数组]442. Find All Duplicates in

    标签(空格分隔): 数组 leetcode 刷题 题目链接 给定一个数组,1≤a[i]≤n(n =数组的大小),里...

  • 刷题-数组专项

    数组 二维数组中的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每...

  • leetcode刷题之数组

    leetcode刷题,使用python 1, 两数之和—— 0001 数组给定一个整数数组 nums 和一个整数...

  • 线段树(Segment Tree)和树状数组(Fenwick T

    前言 在刷题过程中,经常会遇到求数组某区间之和的问题:给出数组a[0...n-1],求数组下标i~j的元素之和a[...

  • 构建乘积数组

    《剑指offer》刷题笔记。如有更好解法,欢迎留言。 关键字:数组 题目描述: 给定一个数组A[0,1,...,n...

  • 大厂算法与数据结构刷题(二)

    大厂算法与数据结构刷题(二) 题目1 给定数组hard和money,长度都为N 数组hard[i]表示i号工作的...

  • leecode刷题(1)-- 删除排序数组中的重复项

    leecode刷题(1)-- 删除排序数组中的重复项 删除排序数组中的重复项 给定一个排序数组,你需要在原地删除重...

  • 2019-12-17 刷题-1(数组)

    26 删除排序数组中的重复项 题目很简单,设置一个指针指向删除后数组结尾。需要注意判断数组为空的情况,否则会run...

  • 2020-03-11 刷题1(数组)

    1013 将数组分成和相等的三个部分 因为题目给了提示: 因为50000 10^4,不会溢出,所以可以放心求和除以...

网友评论

      本文标题:2020-03-13 刷题1 (数组)

      本文链接:https://www.haomeiwen.com/subject/goicshtx.html