剑指Offer JZ28 数组中出现次数超过一半的数字(JavaScript:map)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:661278
本题知识点: 哈希 数组

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

思路:遍历用map存储每个元素,相同元素进行累加,然后判断获取的val是否大于length,大于返回key,否则返回0

function MoreThanHalfNum_Solution(numbers) {
    
    
    // write code here
    let len = numbers.length
    let map = new Map()
    for (let i = 0; i < len; i++) {
    
    
        let tmp = map.get(numbers[i])
        if (tmp === undefined) {
    
    
            map.set(numbers[i], 1)
        } else {
    
    
            map.set(numbers[i], ++tmp)
        }
        if (map.get(numbers[i]) > len / 2) return numbers[i]
    }
    return 0
}

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/115209616