每日一题——LeetCode1394.找出数组中的幸运数

每日一题——LeetCode1394.找出数组中的幸运数_第1张图片

方法一  桶数组计数法

又要保存整数的数值和他出现的频次,那么碰到一个整数num就让res[num]++,那么循环res数组,如果res[i]=0则代表i没有在arr中出现过,res[i]=n则代表i在arr中出现n次

因为题目要求只返回最大的幸运数,所以我们可以倒序遍历res数组。遇见第一个幸运数就返回。

var findLucky = function(arr) {
    let max=Math.max(...arr)
    let res=new Array(max+1).fill(0)
    for(let num of arr){
        res[num]++
    }
    for(let i=res.length-1;i>=1;i--){
        if(res[i]===i) return i
    }
    return -1
};

消耗时间和内存情况:

每日一题——LeetCode1394.找出数组中的幸运数_第2张图片

方法二 哈希Map

使用Map集合的has()和set()方法可以把arr中的数值和出现次数映射成键值对形式,然后遍历Map集合找键和值相等的元素,并用max记录最大值,返回max

var findLucky = function(arr) {
    let map = new Map()
    for(let num of arr){
        if(map.has(num)){
            map.set(num,map.get(num)+1)
        }else{
            map.set(num,1)
        }
    }
    let max=-1
    for(let entry of map){
        if(entry[0]===entry[1] && entry[0]>max){
            max=entry[0]
        }
    }
    return max
};

消耗时间和内存情况:

每日一题——LeetCode1394.找出数组中的幸运数_第3张图片

你可能感兴趣的:(每日一题,算法,javascript,leetcode)