1122. 数组的相对排序

https://leetcode-cn.com/problems/relative-sort-array/
给你两个数组,arr1arr2

  • 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]

提示:

  • 1 <= arr1.length, arr2.length <= 1000
  • 0 <= arr1[i], arr2[i] <= 1000
  • arr2 中的元素 arr2[i] 各不相同
  • arr2 中的每个元素 arr2[i] 都出现在 arr1
  1. package sort;
  2. import java.util.*;
  3. /**
  4. * 自定义排序
  5. */
  6. public class MyDefineSort {
  7. public static void main(String[] args) {
  8. //构建测试用例
  9. //功能测试:正常排序
  10. //边界值测试:
  11. //性能测试:
  12. //异常测试:
  13. int[] regular = {9,8,7,6,5,4,3,2,1};
  14. int[] test1 = {23,546,78,2,4,657,34,8};
  15. int[] test2 = {23,657,89,5,3,7,9,2,3,6};
  16. System.out.println(Arrays.toString(myDefineSort(test1, regular)));
  17. }
  18. public static int[] myDefineSort(int[] array,int[] regular){
  19. Map<Integer,Integer> map = new HashMap<>();
  20. for(int i = 0; i <regular.length; i++){
  21. map.put(regular[i],i);
  22. }
  23. List<Integer> list = new ArrayList<>();
  24. for(int j:array){
  25. list.add(j);
  26. }
  27. Collections.sort(list,(x,y)->{
  28. if (map.containsKey(x)||map.containsKey(y)){
  29. return map.getOrDefault(x,100000) - map.getOrDefault(y,100000);
  30. }
  31. return x-y;
  32. });
  33. for(int k=0;k<array.length;k++){
  34. array[k] = list.get(k);
  35. }
  36. return array;
  37. }
  38. }