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     }
  • 相关阅读:
    STM
    backend flow
    Trace Sys
    CDC spyglass
    clock gating and PLL
    fault coverage enhancement
    008-docker-安装-tomcat:8.5.38-jre8
    007-docker-安装-mysql:5.6
    006-docker-安装-nginx
    005-docker-镜像:run、search、pull、commit、打tag
  • 原文地址:https://www.cnblogs.com/elnino/p/5626241.html
Copyright © 2011-2022 走看看