身高从高到低考虑

  • 根据第一维数据(身高)从大到小排序
  • 再根据第二维数据(数)从小到大排序

准备一个动态数组,根据排完序后的,从左往右遍历,把它们插在它们对于二维数据的位置上,

image.png
image.png

  • 原理
  • 当你在往动态数组里面插东西的时候,是不会影响数组里面已经合规的东西的,(因为现在数组里面的东西身高都比你高或等于, 你插入进去不会影响它们的指标)
  • 之前插入的东西的高度都是≥你的高度的,然后你把你插在i位置,你也达标 (你的第二维数据就是 i )
    1. public int[][] reconstructQueue(int[][] people) {
    2. Arrays.sort(people, new Comparator<int[]>() {
    3. @Override
    4. public int compare(int[] o1, int[] o2) {
    5. return o1[0] != o2[0] ? o2[0] - o1[0] : o1[1] - o2[1];
    6. }
    7. });
    8. List<int[]> list = new ArrayList<>();
    9. for (int i = 0; i < people.length; i++) {
    10. list.add(people[i][1], people[i]);
    11. }
    12. int index = 0;
    13. for (int i = 0; i < people.length; i++) {
    14. people[i] = list.get(i);
    15. }
    16. return people;
    17. }