代码出处https://leetcode-cn.com/problems/relative-sort-array/solution/ming-que-bi-jiao-fang-shi-hou-xiang-zen-yao-pai-ji/
给你两个数组,arr1 和 arr2,
arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例:
输入: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]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/relative-sort-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public int[] relativeSortArray(int[] arr1, int[] arr2) {
int[] count = new int[1001];
// 将 arr1 中的元素出现的次数记录下来,元素作为下标,次数作为count的值。
for (int num1 : arr1) {
count[num1]++;
}
// 先安排 arr2 中的数
//将arr2中出现的数,先按照原来的相对次序排列出来
int i = 0;
for (int num2 : arr2) {
while (count[num2] > 0) {
arr1[i++] = num2;
count[num2]--;
}
}
// 再排剩下的数,剩下的都是arr2没有的,而且他们的大小是按下标排列好的,可以直接取出。
for (int num1 = 0; num1 < count.length; num1++) {
while (count[num1] > 0) {
arr1[i++] = num1;
count[num1]--;
}
}
return arr1;
}
}
作者:lartecy
链接:https://leetcode-cn.com/problems/relative-sort-array/solution/ming-que-bi-jiao-fang-shi-hou-xiang-zen-yao-pai-ji/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。