Given two arrays arr1
and arr2
, the elements of arr2
are distinct, and all elements in arr2
are also in arr1
.
Sort the elements of arr1
such that the relative ordering of items in arr1
are the same as in arr2
. Elements that don't appear in arr2
should be placed at the end of arr1
in ascending order.
Example 1:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19]
Constraints:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
- Each
arr2[i]
is distinct. - Each
arr2[i]
is inarr1
.
思路:counting sort,先count arr1, 然后顺序扫描arr2, 如果count[i] > 0,继续用while loop赋值。最后不在arr2里面的元素,用count array顺序扫描一遍,如果有,就顺序加入;
class Solution {
public int[] relativeSortArray(int[] arr1, int[] arr2) {
int[] count = new int[1001];
// count arr1;
for(int i = 0; i < arr1.length; i++) {
count[arr1[i]]++;
}
int index = 0;
for(int i = 0; i < arr2.length; i++) {
while(count[arr2[i]] > 0) {
arr1[index++] = arr2[i];
count[arr2[i]]--;
}
}
for(int i = 0; i < count.length; i++) {
while(count[i] > 0) {
arr1[index++] = i;
count[i]--;
}
}
return arr1;
}
}