zoukankan      html  css  js  c++  java
  • 主元素 II .

    主元素 II

    给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的三分之一。

    样例

    给出数组[1,2,1,2,1,3,3] 返回 1

    注意

    数组中只有唯一的主元素

    挑战

    要求时间复杂度为O(n),空间复杂度为O(1)。

    嗯。。 百度了一下。

    主元素可能有两个,于是设置两个当前主元素。遍历nums,如果和某个当前住元素相等,则计数加一。如果都不相等

    计数减一,若减后计数小于等于0,则将对应的当前住元素更换。

    最后需要验证,应为当前主元素只有一个,候选有两个。

    lintcode上还有个主元素III,想了一下用这种方法也可以做,但是时间复杂度就是O(n*k)了。

     1 public class Solution {
     2     /**
     3      * @param nums: A list of integers
     4      * @return: The majority number that occurs more than 1/3
     5      */
     6     public int majorityNumber(ArrayList<Integer> nums) {
     7         int n = nums.size();
     8         int max = nums.get(0);
     9         int max1 = -1;
    10         int x = 1;
    11         int x1 = 0;
    12         for(int i=1;i<n;i++) {
    13             int m = nums.get(i);
    14             if(m == max) x++;
    15             else if(m == max1) x1++;
    16             else if(x == 0) {
    17                 max = m;
    18                 x = 1;
    19             }else if(x1 == 0) {
    20                 max1 = m;
    21                 x1 = 1;
    22             }else {
    23                 x--;
    24                 x1--;
    25             }
    26             
    27             if(3*x > n)return max;
    28             if(3*x1 > n)return max1;
    29         }
    30         x=0;
    31         x1=0;
    32         for(int i=0;i<n;i++) {
    33             if(nums.get(i) == max)x++;
    34             if(nums.get(i) == max1)x1++;
    35         }
    36         if(3*x >n) return max;
    37         return max1;
    38     }
    39 }
    View Code
  • 相关阅读:
    印度软件外包合作有感
    BAT 技术团队博客
    Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )
    Android 开源项目及其学习
    Android android:allowBackup waiting for backup
    同步计数器 CountDownLatch
    Android 性能优化之使用Lint
    Android SQLite数据库升级,怎么做(事物更改)
    Google FireBase
    Android Keystore 对称-非对称加密
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5019637.html
Copyright © 2011-2022 走看看