首次代码:
这里的排序已经不是对数组的大小进行排序了,是从新定义了一个优先级,arr2就是这个优先级,0 - arr2.length,值越小优先级越大。所以就重新定义一个map[arr2[i], i],没在arr2里的
值就是arr1 + arr2.length;
class Solution {
public int[] relativeSortArray(int[] arr1, int[] arr2) {
//0 <= arr1[i], arr2[i] <= 1000
int[] map = new int[1010];
// 标记arr2
int len2 = arr2.length;
for (int i = 0; i < len2; i++) {
map[arr2[i]] = i + 1; // 等于零要冲突,故加一
}
// 对arr1排序
List<Integer> arr1List = new ArrayList<>();
for (int arr : arr1) {
arr1List.add(arr);
if (map[arr] == 0) map[arr] = len2 + arr;
}
arr1List.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return map[o1] - map[o2];
}
});
int[] relativeSortArray = new int[arr1.length];
int index = 0;
for (Integer integer : arr1List) {
relativeSortArray[index++] = integer;
}
return relativeSortArray;
}
}