根据身高重建队列(贪心算法)

该博客主要讨论如何对包含身高和k值的二维数组进行排序。首先按照身高降序排列,若身高相同,则按k值升序排列。接着,将排序后的数组根据k值插入新的数组中,以实现重构队列的过程。示例代码中使用了Java的Arrays.sort()函数结合自定义比较器实现排序,并通过遍历排序后的数组插入到正确位置。
摘要由CSDN通过智能技术生成

 分析:(1) 根据所给的people数组进行排序,按照身高以降序的方式排序,若身高相同则按照k的值进行升序排列。因为高个排在前面会影响后面低个子的k值。

(2)把排好的people数组中低个按照k值插入数组的下标为k的地方。

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        int n = people.length;
        int m = people[0].length;
        if(n == 0 || m == 0) return new int [0][0];
        Arrays.sort(people, new Comparator<int[]>(){
            @Override
            public int compare(int[] o1, int[] o2){
                //先按身高降序,若身高相同则按k值升序
                return o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0];
            }
        });
        //遍历排序后的数组,根据k插到k的位置上
        List<int[]> list = new ArrayList<>();
        for(int[] i : people){
            list.add(i[1],i);
        }
        return list.toArray(new int[list.size()][2]);
    }
}
class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(o1,o2)->o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);
        //用lambda表达式定义比较器,对people数组根据身高进行降序排序,如过身高相同则根据k的升序排序
        //[7,0][7,1][6,1][5,0][5,2][4,4]
        List<int[]> list = new ArrayList<>();
        for(int[] num : people){
            list.add(num[1] , num);
        }
        return list.toArray(new int[list.size()][2]);

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值