• 主元素 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
  • 相关阅读:
    ViewData和TempData
    ASP.NET 缓存
    php配置的问题
    不错的文章
    谁能给个mvc的学习源码吗?
    win7下php + apache +mysql 5问题
    关于coolite grid 存储过程分页的问题,忘大虾解决...
    大侠们,关于asp.net与jsonp之间的东东
    jquery $.getjson $.post
    asp.net像博客园一样的Calendar(日期控件)
  • 原文地址:https://www.cnblogs.com/FJH1994/p/5019637.html
Copyright © 2020-2023  润新知