leetcode记录-406-根据身高重建队列-贪心

406.根据身高重建队列

在这里插入图片描述

思路

因为此排序与两个元素有关,所以单纯的排序某个元素很难操作。而排序的规则,首先第一个元素同条件下,尽量大的在前面;第二个元素,同首元素下,需要小的在前面(因为前面是大于等于它的)。所以需要同时考虑两个元素的排序,而这种排序有特定的方法。排好序之后因为首元素大的在前面,所以从头开始,后面的元素其前面的都比自己大或者相等,这个个数就要对应尾元素的数字,此时存在有些首元素大的需要排到后面,当前数对直接放到所在下标即可,保证了前面都比自己大,也保证了个数。

代码

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(o1, o2) -> o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]);//记
        List<int[]> list=new ArrayList<>();
        for (int[] i:people) { //记
            list.add(i[1],i);
        }
        return list.toArray(new int[list.size()][2]);//记
    }
}

总结和技巧

  1. 数对首尾元素同时排序(不同排序方式):Arrays.sort(people,(o1, o2) -> o1[0]==o2[0]?o1[1]-o2[1]:o2[0]-o1[0]); —— 首升尾降
  2. for-each循环:适合对每个元素进行操作,其中冒号前面的是数组的每个元素的类型,本题二维数组的每个元素是一维数组。for (int[] i:people) { }
  3. 需要元素逐个操作,加到数组,并且需要对下标进行一些操作,直接用数组麻烦,可以用List。
  4. list.add(E e)直接List加元素,list.add(int index,E e)向List的index下标加元素。
  5. List转为数组:list.toArray(T[] arr)T [] arr(可选参数)- 用于存储数组元素的数组,T为数组类型,如果不带参数,返回Object类型的数组。而且,参数是需要new的空数组****。
  6. List转数组声明参数需要为引用类型,int[]为引用类型,所以可以list.toArray(new int[list.size()][2]);,但是不能list.toArray(new int[2]);,因为int不是引用类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值