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

题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容