1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| class Solution { public int[] relativeSortArray(int[] arr1, int[] arr2) { Map<Integer, Integer> valueToOrderMap = new HashMap<>(); for (int i = 0; i < arr2.length; i++) { valueToOrderMap.put(arr2[i], i); }
List<Integer> list = new ArrayList<>(); for (int num : arr1) { list.add(num); } list.sort((o1, o2) -> { Integer order1 = valueToOrderMap.get(o1); Integer order2 = valueToOrderMap.get(o2); if (order1 != null && order2 != null) { return order1 - order2; } else if (order1 == null) { if (order2 == null) { return o1 - o2; } else { return 1; } } else { return -1; } }); int[] res = new int[list.size()]; for (int i = 0; i < list.size(); i++) { res[i] = list.get(i); } return res; } }
|
References
1122. Relative Sort Array
剑指 Offer II 075. 数组相对排序