• leetcode 229: Majority Element II


    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;
        }
    }


  • 相关阅读:
    KindEditor编辑器的使用
    导航栏
    ajax php 验证注册用户名是否存在
    PS照片改底色
    截取邮箱@后面内容的两种情况
    js导航栏单击事件背景颜色变换
    model中的自动验证 $_validate $_auto
    一对一关联模型,HAS_ONE
    一对多关联模型,BELONGS_TO
    C++操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7201455.html
Copyright © 2020-2023  润新知