力扣刷题-前k个高频元素

力扣刷题-前k个高频元素
题目:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:

输入: nums = [1], k = 1
输出: [1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/top-k-frequent-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这里对这个javascript的二维数组,又给搞蒙了,好像js没有二维数组,所以如果这样arr[1][1]是取不到的,会报错,但是sort,forEach,map里面怎么又可以用了呢,太奇怪了,作为一个极其喜欢用for循环写题的人极其不理解这种操作。所以是为啥有没有大佬能指点一下。

今天也是第一次看到原来数组也有map方法,说实话跟ForEach方法很像,只不过forEach永远返回undefined,然后map返回的东西自己在函数里面写。

还有就是Map字典为什么不可以map.get(nums[i])直接对它加一,为什么又要set()一次,可以这样覆盖掉键值吗,虽然好像必须这样,有点小奇怪

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function(nums, k) {
    var map = new Map()
    for(var i = 0; i < nums.length; i++){
        if(map.has(nums[i])){
            map.set(nums[i],map.get(nums[i])+1)
        }else{
            map.set(nums[i],1)
        }
    }

    var list = Array.from(map).sort(function(a,b){ return b[1]-a[1] })//这里注意是return 1,则后面的数放在前面
    console.log(list)
    var list = list.slice(0,k)
    console.log(list)
    var arr= []
    list.forEach(function(item){ arr.push(item[0])},this)
    // return list.map(function(item){
    //     return item[0]
    // })
    return arr

};


你可能感兴趣的:(leetcode,算法,职场和发展)