比较大小406. 根据身高重建队列

406. 根据身高重建队列

假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

注意:
总人数少于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]]

先比较总的身高大小,按照身高从大到小进行排序,因为k的值是按照前面是否有k个人高于或等于自身身高进行匹配的,
所以身高高的人对与矮的人是无视的,先进行身高进行排序,在按照k值进行排序.

Arrays.sort(people, new Comparator<int[]>() {
        @Override
        public int compare (int[] o1, int[] o2) {
            return o1[0] == o2[0] ? o1[1] - o2[1]:o2[0] - o1[0];
            //根据k值进行比较,假设 o1[1]=1,o2[0]=0,这应该返回负数,使o1排前面
        }
    });

这里是构造了一个比较器Comparator,在按照高到低进行排序的同时,再进行k值的比较的时候。
建立比较强

 public int compare (int[] o1, int[] o2) {
            return o1[0] == o2[0] ? o1[1] - o2[1]:o2[0] - o1[0];
            //根据k值进行比较,假设 o1[1]=1,o2[0]=0,这应该返回负数,使o1排前面
        }

如果两个people[][0]的值不一样,就进行身高比对大小,根据大小进行排序.如果体重相同则比较k值,不同这比较体重。当return等于负数的时候,o1比o2小
反之o1比o2大 比较器按照大小进行排序。此时比较是
全部解题代码

 public int[][] reconstructQueue(int[][] people) {
        //比较器Comparator的构造
        //如果返回值为负数意味着o1比o2小,否则返回为零意味着o1等于o2,返回为正数意味着o1大于o2,返回值为负数,则表示o1比o2小,o1排在前面;反之如果返回1,则表示o2比o1小,so排在前面。
        Arrays.sort(people, new Comparator<int[]>() {
        @Override
        public int compare (int[] o1, int[] o2) {
            return o1[0] == o2[0] ? o1[1] - o2[1]:o2[0] - o1[0];
            //根据k值进行比较,假设 o1[1]=1,o2[0]=0,这应该返回负数,使o1排前面
        }
    });

//        for (int[] person : people) {
//            System.out.println(Arrays.toString(person));
//        }

    List<int[]> queue = new ArrayList<>();
    for (int[] person : people) {
        queue.add(person[1],person);
    }
    return queue.toArray(new int[queue.size()][1]]);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值