javascript - 相对排序数组 Javascript
问题描述
我正在解决 LeetCode 上的一个问题并且遇到了一些麻烦
https://leetcode.com/problems/relative-sort-array/
说明:给定两个数组 arr1 和 arr2,arr2 的元素是不同的,并且 arr2 中的所有元素也在 arr1 中。
对 arr1 的元素进行排序,使 arr1 中的项目的相对顺序与 arr2 中的相同。未出现在 arr2 中的元素应按升序放置在 arr1 的末尾。
示例 1:
输入: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]
我的尝试:
var relativeSortArray = function(arr1, arr2) {
let arr =[]
let end =[]
for (i=0; i<arr2.length; i++){
for (j=0; j<arr1.length; j++){
if(arr2[i] == arr1[j]){
arr.push(arr1[j])
}else{
end.push(arr1[j])
}
}
}
end.sort((a,b) => a-b)
console.log(end)
return arr
};
If 条件有效,但 else 条件无效,我不知道为什么。
我认为 console.log(end) 应该给我两个不在 arr2 中的数字,而是给我:
[
1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 6,
6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 9, 9,
9, 9, 9, 19, 19, 19, 19, 19, 19
]
为什么会这样?
谢谢!!!
解决方案
您可以将一个对象作为一个值的位置,并将一个较大的值Number.MAX_VALUE
作为默认值。如果增量为零,按值排序。
使用 delta 是一个标准Array#sort
。这将返回一个小于零、零或大于零的值,具体取决于值。sort 方法接收此值并保留或交换这些值。
const
relativeSort = (array, given) => {
const order = Object.fromEntries(given.map((v, i) => [v, i + 1]));
return array.sort((a, b) =>
(order[a] || Number.MAX_VALUE) - (order[b] || Number.MAX_VALUE) ||
a - b
);
};
console.log(...relativeSort([2, 3, 1, 3, 2, 4, 6, 7, 9, 2, 19], [2, 1, 4, 3, 9, 6]));
推荐阅读
- python-3.x - 将值列表传递给 matplotlib 中的刻度构造函数
- unetstack - 如何获取 Unetstack 中所有邻居节点的剩余能量?
- angular - 无法读取 Angular 7 中未定义的属性“nativeElement”
- airflow - Cloud Composer、Airflow - web_server_worker_timeout 环境变量
- c# - 在运行时使用属性名称和类型查询 IQueryable
- javascript - SyntaxError:运算符“=”的左侧必须是引用
- ruby-on-rails - 如何使用 Ruby on Rails 将 ElasticSearch 从 6.8 升级到 7.X
- excel - VBA code to copy column from Excel based on header name to another sheet
- excel - Get Google Maps XML data, parse it and input to Excel cells
- string - Add escapes to special characters in a string (as a function)