方法一 桶数组计数法
又要保存整数的数值和他出现的频次,那么碰到一个整数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
};
消耗时间和内存情况:
方法二 哈希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=-1for(let entry of map){if(entry[0]===entry[1] && entry[0]>max){max=entry[0]}}return max
};
消耗时间和内存情况: