美文网首页让前端飞程序员数据结构和算法分析
《剑指offer》— JavaScript(28)数组中出现次数

《剑指offer》— JavaScript(28)数组中出现次数

作者: echoVic | 来源:发表于2017-03-13 10:53 被阅读0次

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

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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;
    }
    

    相关文章

      网友评论

        本文标题:《剑指offer》— JavaScript(28)数组中出现次数

        本文链接:https://www.haomeiwen.com/subject/lhjfnttx.html