【发布时间】:2020-11-14 13:42:51
【问题描述】:
我正在解决 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
]
为什么会这样?
谢谢!!!
【问题讨论】:
-
你的逻辑错了,通过 indexOf 函数遍历 arr1 检查值是否在 arr2 中
-
您的
end
数组很大,因为在arr2
的每次迭代中,您都会一遍又一遍地找到相同的缺失元素。 -
@AkashDathan 结果告诉我这是错误的。我不明白这是怎么回事。我认为他们在这里是同样的推动,如果不是在那里推动的话。为什么这不起作用?
-
@CarlosRoso 它如何再次迭代所有内容?
-
首先 i = 0。然后遍历
arr1
中的所有项目,找到缺少的项目,并将它们添加到end
。然后,i = 1,然后你遍历arr1
中的所有项目,找到缺少的项目,并将它们添加到end
。然后,i = 2,然后....
标签: javascript sorting