zoukankan      html  css  js  c++  java
  • (medium)LeetCode 229.Majority Element II

    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>list=new ArrayList<Integer>();
           if(nums==null) return list;
           int len=nums.length;
           if(len==0) return list;
           if(len==1){
               list.add(nums[0]);
               return list;
           }
           int m1=nums[0];
           int m2=0;
           int c1=1;
           int c2=0;
           for(int i=1;i<len;i++){
               
                if(nums[i]==m1)
                       c1++;
                else if(nums[i]==m2)
                       c2++;
                else if(c1==0){
                   m1=nums[i];
                   c1=1;
               }else if(c2==0){
                   m2=nums[i];
                   c2=1;
               }
               else{
                   c1--;
                   c2--;
               }
           }
            c1=0; c2=0;
           for(int i=0;i<len;i++){
               if(nums[i]==m1)
                   c1++;
               else if(nums[i]==m2)
                   c2++;
           }
           if(m1!=m2){  //防止[0,0]情况出现,其实不加也可以,加了运行时间缩短20ms
             if(c1>len/3) list.add(m1);
             if(c2>len/3) list.add(m2);
           }else{
               list.add(m1);
           }
           return list;
           
        }
    }
    

      

     运行结果:

     

  • 相关阅读:
    001-进程与线程
    mysql优化(11)
    mysql优化(十)
    mysql优化(九)
    mysql优化(八)
    mysql优化(七)
    mysql优化(六)
    mysql优化(五)
    mysql优化(四)
    mysql优化(二)
  • 原文地址:https://www.cnblogs.com/mlz-2019/p/4709413.html
Copyright © 2011-2022 走看看