「每日LeetCode」2021年8月13日

本文最后更新于:2023年3月19日 晚上

剑指 Offer II 075. 数组相对排序

剑指 Offer II 075. 数组相对排序

给定两个数组,arr1arr2

  • arr2 中的元素各不相同
  • arr2 中的每个元素都出现在 arr1

arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例:

1
2
输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

提示:

  • 1 <= arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • arr2 中的元素 arr2[i] 各不相同
  • arr2 中的每个元素 arr2[i] 都出现在 arr1

注意:本题与主站 1122  题相同:https://leetcode-cn.com/problems/relative-sort-array/

思路

用一个 map 记录 arr2 中相对排序,重写相关 sort 相关,若 map 中不存在,升序排列,若都存在,使用 map 中记录的相对排序排列。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number[]} arr1
* @param {number[]} arr2
* @return {number[]}
*/
var relativeSortArray = function (arr1, arr2) {
const map = {};
for (let i = 0; i < arr2.length; i++) {
map[arr2[i]] = i;
}
arr1.sort((a, b) => {
if (!map[a] && !map[b]) return a - b;
return map[a] - map[b];
});
return arr1;
};