本文共 1093 字,大约阅读时间需要 3 分钟。
注意:
总人数少于1100人。示例
输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
方法一:先排序后插入
首先数组按照先H高度降序,K升序排序,遍历排序后的数组,根据K插入到K的位置上。
class Solution { public int[][] reconstructQueue(int[][] people) { // [7,0], [7,1], [6,1], [5,0], [5,2], [4,4] // 再一个一个插入。 // [7,0] // [7,0], [7,1] // [7,0], [6,1], [7,1] // [5,0], [7,0], [6,1], [7,1] // [5,0], [7,0], [5,2], [6,1], [7,1] // [5,0], [7,0], [5,2], [6,1], [4,4], [7,1] Arrays.sort(people, new Comparator(){ @Override public int compare(int[] o1,int[] o2){ return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]; } }); LinkedList list = new LinkedList<>(); for (int[] i : people) { list.add(i[1], i); } return list.toArray(new int[list.size()][2]); }}
核心思想:高个子先站好位,矮个子插入到K位置上,前面肯定有K个高个子,矮个子再插入到前面也满足K的要求。
转载地址:http://gwwzi.baihongyu.com/