class Solution {
public int[][] reconstructQueue(int[][] people) {
if(people.length==0){
return people;
}
Arrays.sort(people, (o1, o2) -> (o1[0]==o2[0])?o1[1]-o2[1]:o2[0]-o1[0]);
ArrayList<int[]> list = new ArrayList<>();
for(int i=0;i<people.length;i+=1){
int[] nowarray = people[i];
list.add(nowarray[1],nowarray);
}
int[][] retarray = new int[people.length][people[0].length];
for(int i=0;i<list.size();i+=1){
retarray[i] = list.get(i);
}
return retarray;
}
}
这是java自定义排序的准则。
这道题的思路就是先对people数组进行自定义排序,首要因素比较身高,身高相同比较index。
这里我们可以这样记自定义排序的规则。想要让数组升序,则o2-o1。否则(降序),则是o1-o2!!!
之后就需要用到贪心的思想了。
之后用一个arraylist装入所有的int[],如何装入?根据int[1]作为index,选定位置插入,最后再把arraylist转为int[]即可。
思想就是优先满足身高高的元素,因为这样之后的元素无论怎么插入也不可能影响已经插入了的元素