leetcode-根据身高重建队列

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[]即可。

思想就是优先满足身高高的元素,因为这样之后的元素无论怎么插入也不可能影响已经插入了的元素

发布了48 篇原创文章 · 获赞 0 · 访问量 4322

猜你喜欢

转载自blog.csdn.net/weixin_41327340/article/details/103754436