持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情。
题目描述
给你两个数组,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每个元素都出现在 arr1 中。
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
来源:力扣(LeetCode)
- 示例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]
- 示例
输入: arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
输出: [22,28,8,6,17,44]
提示:
- 1 <= arr1.length, arr2.length <= 1000
- 0 <= arr1[i], arr2[i] <= 1000
- arr2 中的元素 arr2[i] 各不相同
- arr2 中的每个元素 arr2[i] 都出现在 arr1 中
思路分析
剧题意可知,我们需要从arr1中找出某人些元素,这些元素全部都出现在arr2中,然后按arr2的顺序排列起来,剩下一些没有在arr2出现的元素就按照升序放在arr1的末尾。arr2中的每一个元素都一定会出现在arr1中。 简单粗暴的实现方法只需要三步,按arr2中的顺序取出arr1在arr2中的所有元元素,循环arr2然后在每次循环中再循环arr1,这样就能按顺序取出了,接着过滤出不在arr2中的arr1中的元素,循环arr1,用javaScript的includes方法判断是否在arr2中,若不是则返回出来,这样就能过滤出来了,紧接着将过滤出来的数组进行升序排序,到了这一步就产生了两个新的数组,一个按arr2排序的数组,一个是不在arr2中并按升序排序的数组,将两个数组合并就是我们想要得到的数组了。
let arr1 = [2,3,1,3,2,4,19,6,7,9,2], arr2 = [2,1,4,3,9,6]
function solution(long, short) {
let sameArr = [], newArr = []
short.forEach( item => {
long.forEach( subItem => {
if(item === subItem) {
sameArr.push(subItem);
}
})
})
long.forEach( item => {
if(!(short.includes(item))) {
newArr.push(item)
}
})
newArr.sort((a, b) => {return a - b});
console.log(sameArr)
console.log(newArr)
return [...sameArr, ...newArr]
}
solution(arr1, arr2)