[菜鸟刷题]算法——Map+排序

68 阅读1分钟

347. 前 K 个高频元素

image.png

【题解】

  • 记录元素出现次数,然后对记录排序

【代码】

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var topKFrequent = function(nums, k) {
    let numsMap = new Map()
    for(let num of nums){
        if(numsMap.has(num)){
            numsMap.set(num,numsMap.get(num)+1)
        }else{
            numsMap.set(num,1)
        }
    }
    
    let ret = [...numsMap.entries()]
    ret.sort((a, b) => b[1] - a[1])
    return ret.splice(0,k).map(i=>i[0])
};

451. 根据字符出现频率排序

image.png

【题解】

  • 记录元素出现次数,然后对记录排序
  • 根据元素出现的次数,重组字符串 【代码】
/**
 * @param {string} s
 * @return {string}
 */
var frequencySort = function(s) {
  let map = new Map()
  for (let i of s) {
    if (map.get(i)) {
      map.set(i, map.get(i)+1)
    } else {
      map.set(i, 1)
    }
  }

  let sortArr = [...map.entries()].sort((a, b) => b[1] - a[1])
  let ret = []
  for (let arr of sortArr) {
    let l = ''
    while (arr[1] > 0) {
      l+=arr[0]
      arr[1]--
    }
    ret.push(l)
  }
  
  return ret.join('')
};