zoukankan      html  css  js  c++  java
  • leetcode majority number

    给定一组数,有一个数在这组数里的出现次数超过n/2次。

    求出这是哪个数

    https://leetcode.com/problems/majority-element/

    一开始考虑的方是将所有数转化为二进制,那么对于这些二进制数来说。

    其每一位上必然是出现次数最多的数决定了它是1还是0。

    例如,将每个二进制数的最低位加起来,得到一个sum。

    那么如果sum/nums.length大于0.5那么这个majority number在最低位必然是1

    反之必然为0。这样就可以把所有的位置求出来。AC了

    但是网上查到了一个更好的解法。

    即,每出现一对不同的数,就删除它,那么到最后剩下的那个数必然是所求的数。

    网上给出的代码也极为精巧

     1     public int majorityElement(int[] nums) {
     2            int count = 0, candidate = -1;
     3             for (int i = 0; i < nums.length; i++) {
     4                 if (count == 0) {
     5                     candidate = nums[i];
     6                     count = 1;
     7                 } else if (candidate == nums[i]) {
     8                     count++;
     9                 } else {
    10                     count--;
    11                 }
    12             }
    13             return candidate;
    14     }
  • 相关阅读:
    pop指令的执行过程
    ipad 4.2 开发环境
    XP远程桌面
    停机问题、哥德尔定理
    看MIT的线性代数
    VizA项目继续推进
    port systemc to mac os x
    关于jar
    普桑
    拉突爾
  • 原文地址:https://www.cnblogs.com/elnino/p/5626241.html
Copyright © 2011-2022 走看看