zoukankan      html  css  js  c++  java
  • LeetCode 229. 求众数 II JAVA

    题目:

    给定一个大小为 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

    说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

    示例 1:

    输入: [3,2,3]
    输出: [3]

    示例 2:

    输入: [1,1,1,3,3,2,2,2]
    输出: [1,2]

    解题:

    class Solution {
       public List<Integer> majorityElement(int[] nums) {
            int m1 = 0, m2 = 0, c1 = 0, c2 = 0;
            for(int i = 0; i < nums.length; i++){
                if(nums[i] == m1){
                    c1++;
                }else if(nums[i] == m2){
                    c2++;
                }else if(c1 == 0){
                    m1 = nums[i];
                    c1++;
                }else if(c2 == 0){
                    m2 = nums[i];
                    c2++;
                }else{
                    c1--;
                    c2--;
                }
            }
            
            c1 = 0;
            c2 = 0;
            
            for(int i = 0; i < nums.length; i++){
                if(nums[i] == m1){
                    c1++;
                }else if(nums[i] == m2){
                    c2++;
                }
            }
            
            List<Integer> res = new ArrayList<>();
            if(c1 > nums.length/3){
                res.add(m1);
            }
            
            if(c2 > nums.length/3){
                res.add(m2);
            }
            
            return res;
        }
    }
  • 相关阅读:
    团队博客——1
    团队博客3
    团队博客6
    团队博客2
    团队博客8
    团队博客4
    团队博客7
    安装“消息队列 (MSMQ)”
    服务端上传文件到共享目录
    数据库变成可疑状态
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10873018.html
Copyright © 2011-2022 走看看