码迷,mamicode.com
首页 > 其他好文 > 详细

(medium)LeetCode 229.Majority Element II

时间:2015-08-06 23:52:02      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

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.

解法:参考编程之美129页,寻找发帖水王

代码如下:

public class Solution {
    public List<Integer> majorityElement(int[] nums) {
        List<Integer> res=new ArrayList<>();
        if(nums==null ||nums.length==0) return res;
        int len=nums.length;
        if(len==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<len;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<len;i++){
            if(m1==nums[i]) c1++;
            else if(m2==nums[i]) c2++;
        }
        if(c1>len/3) res.add(m1);
        if(c2>len/3) res.add(m2);
        return res;
    }
}

 运行结果:

技术分享 

(medium)LeetCode 229.Majority Element II

标签:

原文地址:http://www.cnblogs.com/mlz-2019/p/4709413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!