zoukankan      html  css  js  c++  java
  • 《剑指offer》— JavaScript(28)数组中出现次数超过一半的数字

    数组中出现次数超过一半的数字

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。


    思路

    1. 新建一个空对象obj保存数组中数字出现的次数;
    2. 遍历数组,如果该数字出现过,则obj中以该数字为key的value加1;
    3. 若该数字未出现过,则obj中以该数字为key的value设为1;
    4. 遍历obj对象,返回value大于数组长度一半的key,即为所求数字。

    实现代码

    function MoreThanHalfNum_Solution(numbers)
    {
      var obj = {};
      var length = numbers.length;
      numbers.forEach(function(d) {
        if (obj[d]) {
          obj[d]++;
        } else {
          obj[d] = 1;
        }
      })
      for (var i in obj) {
        if (obj[i] > Math.floor(length / 2)) {
          return i;
        }
      }
      return 0;
    }
    
  • 相关阅读:
    【BZOJ4300】绝世好题
    codeforce1051F
    【BZOJ3329】Xorequ
    codeforce739c
    【UVA11825】
    codeforce6E
    CF 1023D Array Restoration
    BZOJ 1911 [APIO2010] 特别行动队
    POJ 3709 K-Anonymous Sequence
    BZOJ 2726 [SDOI2012] 任务安排
  • 原文地址:https://www.cnblogs.com/echovic/p/6541681.html
Copyright © 2011-2022 走看看