数组的相对排序

124 阅读1分钟

题目描述

leetcode-cn.com/problems/re…

分析

观察题目要求,可以看到数组元素的大小是有限的,因此本题可用计数排序

算法

计数排序

过程

统计合法范围内的所有数字出现次数

这个统计是一个数组

遍历统计结果,看每一个数字出现的次数,重新构建数组

代码

/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 * @return {number[]}
 */
var relativeSortArray = function (arr1, arr2) {
  const count = new Array(1001).fill(0)
  for (const x of arr1) {
    count[x]++
  }

  const res = []
  for (const x of arr2) {
    while (count[x]) {
      res.push(x)
      count[x]--
    }
  }

  for (let i = 0; i < count.length; i++) {
    while (count[i]) {
      res.push(i)
      count[i]--
    }
  }

  return res
}