美文网首页Web前端之路让前端飞程序员
【剑指offer】数组中出现次数超过一半的数字

【剑指offer】数组中出现次数超过一半的数字

作者: 公子七 | 来源:发表于2017-08-27 18:49 被阅读48次

    题目描述
    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
    解法
    如果对每个数字进行遍历,判断其出现次数,时间复杂度为O(n^2);
    可以先对数组进行排序。
    如果一个数字出现的次数超过数组长度的一半,则数组中间的数字一定是该数字。
    以中间数字为标准。
    遍历排序后的数组,判断是否与中间数字相等。如果相等,count++;
    代码:

    function MoreThanHalfNum_Solution(numbers) {
        numbers.sort(function (a, b) {
            return b - a;
        })
        var mid = Math.floor(numbers.length / 2);
        var num = numbers[mid];
        var count = 0;
        numbers.forEach(function (val) {
            if (val == num) {
                count++;
            }
        })
        if (count <= mid) {
            return 0;
        } else {
            return num;
        }
    }
    
    var numbers = [1,2,3,2,2,2,5,4,2];
    console.log(MoreThanHalfNum_Solution(numbers));
    

    相关文章

      网友评论

        本文标题:【剑指offer】数组中出现次数超过一半的数字

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