zoukankan      html  css  js  c++  java
  • [leedcode 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.

    public class Solution {
        public List<Integer> majorityElement(int[] nums) {
            /*首先,可以通过分析得到结论:满足条件的数字个数cnt最多为2。 
      证明: ifcnt>2⇒cnt× (⌊n/3⌋+1 )>n 超出原数组的大小。 
      然后,借鉴在数组中求出现次数超过一半的数这道题的思路: 
       
      1). 第一遍扫描,设两个计数器和变量记录数组nums[]中出现频率最高的数。 
      2). 第二遍扫描,计算着两个数出现的次数。 
      3). 判断这两个数是否符合要求,符合则存入结果集。
      需要注意的是:
      第一个for循环的判断顺序,首先要判断是否等于m或n
      */
            List<Integer> res=new ArrayList<Integer>();
            if(nums==null||nums.length<=0) return res;
            int m=0;
            int n=0;
            int countm=0;
            int countn=0;
            
            for(int i=0;i<nums.length;i++){
                
                
               /*if(m==nums[i]) countm++;
               else if(n==nums[i]) countn++;
               else if(countm==0){
                   countm=1;
                   m=nums[i];
               }else if(countn==0){
                   countn=1;n=nums[i];
               }else {
                    countm--;
                    countn--;
                }*/
                
                
                if(m==nums[i]||countm==0){
                    countm++; m=nums[i];
                }else if(n==nums[i]||countn==0){
                    countn++; n=nums[i];
                }else{
                    countm--;countn--;
                }
            }
            countm=0;
            countn=0;
           for(int i=0;i<nums.length;i++){
               if(nums[i]==m) countm++;
               else if(nums[i]==n) countn++;
           }
           if(countm>nums.length/3) res.add(m);
           if(countn>nums.length/3) res.add(n);
            return res;
        }
    }
  • 相关阅读:
    一个新的Activity跳转到带有Framgment的Activity页面
    安卓图片下载及存储
    安卓4.0以上 UDP 发送端
    安卓 service 后台运行,activity 启动和停止service
    安卓 BaseAdapter ListView和Button
    安卓点击两次返回键退出程序
    安卓 surfaceview 添加点击事件
    Mybatis
    Cookie
    AJAX原生代码
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4713306.html
Copyright © 2011-2022 走看看