leetcode 229: Majority Element II

原创 2015年07月07日 04:40:19

Majority Element II

Total Accepted: 3172 Total Submissions: 14746

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.


[思路]

[REFERENCE] http://bookshadow.com/weblog/2015/06/29/leetcode-majority-element-ii/

观察可知,数组中至多可能会有2个出现次数超过 ⌊ n/3 ⌋ 的众数

记变量n1, n2为候选众数; c1, c2为它们对应的出现次数

遍历数组,记当前数字为num

若num与n1或n2相同,则将其对应的出现次数加1

否则,若c1或c2为0,则将其置为1,对应的候选众数置为num

否则,将c1与c2分别减1

最后,再统计一次候选众数在数组中出现的次数,若满足要求,则返回之。


[CODE]

public class Solution {
    public List<Integer> majorityElement(int[] nums) {
        // 1, 2
        List<Integer> res = new ArrayList<>();
        if(nums==null || nums.length==0) return res;
        if(nums.length==1) {
            res.add(nums[0]);
            return res;
        }
        
        int m1 = nums[0];
        int m2 = 0;
        
        int c1 = 1;
        int c2 = 0;
        
        for(int i=1; i<nums.length; i++) {
            int x = nums[i];
            if(x==m1) ++c1;
            else if(x==m2) ++c2;
            else if(c1==0) {
                m1 = x;
                c1 = 1;
            } else if(c2==0) {
                m2 = x;
                c2 = 1;
            } else {
                --c1; --c2;
            }
        }
        c1 = 0; c2 = 0;
        for(int i=0; i<nums.length; i++) {
            if(m1 == nums[i]) ++c1;
            else if(m2 == nums[i]) ++c2;
        }
        if(c1>nums.length/3) res.add(m1);
        if(c2>nums.length/3) res.add(m2);
        return res;
    }
}


229.Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algori...
  • sjt091110317
  • sjt091110317
  • 2015年07月01日 08:53
  • 916

Majority Element && Majority Element II

查找数组的多数元素
  • u013819100
  • u013819100
  • 2015年08月15日 11:06
  • 2505

LeetCode229:Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The alg...
  • u012501459
  • u012501459
  • 2015年07月29日 15:13
  • 986

[LeetCode 229] Majority element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algori...
  • sbitswc
  • sbitswc
  • 2015年09月02日 06:45
  • 1448

代码面试题:Majority Number II

public int majorityNumber2(int[] A){ if (A == null || A.length == 0) { return -1; } ...
  • Kagura_std
  • Kagura_std
  • 2014年09月04日 10:08
  • 2641

Majority Number II——算法练习

No.1-2 Majority Number II Given an array of integers, the majority number is the number that occur...
  • lxf_44944
  • lxf_44944
  • 2015年02月13日 14:46
  • 824

[LintCode] 主元素 II Majority Number II

给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。注意事项 数组中只有唯一的主元素样例 给出数组[1,2,1,2,1,3,3] 返回 1挑战 要求时间复杂度为O...
  • wutingyehe
  • wutingyehe
  • 2016年04月26日 15:11
  • 651

【LeetCode-面试算法经典-Java实现】【169-Majority Element(主元素)】

【169-Majority Element(主元素)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-Chao】原...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月23日 06:38
  • 4468

【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2483

【LeetCode】169. Majority Element (多数投票算法 & 算法迁移能力)

Question1Given an array of size n, find the majority element. The majority element is the element th...
  • jiange_zh
  • jiange_zh
  • 2016年01月09日 10:41
  • 1227
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode 229: Majority Element II
举报原因:
原因补充:

(最多只允许输入30个字)