Leetcode——根据身高重建队列 / 游戏中弱角色的数量 (排序,compare)

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——根据身高重建队列 / 游戏中弱角色的数量 (排序,compare)相关的知识,希望对你有一定的参考价值。

1. 根据身高重建队列

(1)先排序再插队

套路

  • 一般这种数对,还涉及排序的,根据第一个元素正向排序,根据第二个元素反向排序,或者根据第一个元素反向排序,根据第二个元素正向排序,往往能够简化解题过程。

在本题:

  • 首先对数对进行排序,按照数对的元素 1 降序排序,按照数对的元素 2 升序排序。
  • 原因是,按照元素 1 进行降序排序,对于每个元素,在其之前的元素的个数,就是大于等于他的元素的数量,而按照第二个元素正向排序,我们希望 k 大的尽量在后面,减少插入操作的次数。







class Solution {
    public int[][] reconstructQueue(int[][] people) {
        //按数组第一个元素进行降序,按第二个元素进行升序
        Arrays.sort(people, new Comparator<int[]>() {
            @Override
            public int compare(int[] person1, int[] person2){
                if (person1[0] != person2[0]){
                    //第一个元素不相等时,第一个元素降序
                    return person2[0] - person1[0];
                }else{
                    //第一个元素相等时,第二个元素升序
                    return person1[1] - person2[1];
                }
            }
        });

        //新建一个list,用于保存结果集
        List<int[]> list = new LinkedList<>();
        for (int i = 0; i < people.length; i++) {
            if (list.size() > people[i][1]){
                //结果集中元素个数大于第i个人前面应有的人数时,将第i个人插入到结果集的 people[i][1]位置
                list.add(people[i][1],people[i]);
            } else {
                //结果集中元素个数小于等于第i个人前面应有的人数时,将第i个人追加到结果集的后面
                list.add(list.size(),people[i]);
            }
        }
        //将list转化为数组,然后返回
        return list.toArray(new int[list.size()][]);
    }
}

2. 游戏中弱角色的数量

(1)排序

class Solution {
    public int numberOfWeakCharacters(int[][] properties) {
        int res = 0;
        
        //第一个元素降序, 第二个元素升序
        Arrays.sort(properties, (a, b) -> (a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]));
        
        int maxDef = properties[0][1];
        int maxA = properties[0][0];
        for (int i = 1; i < properties.length; i++) {
            
            maxDef = Math.max(maxDef, properties[i][1]);
            if (properties[i][0] == maxA) {
                continue;
            }
            if (properties[i][1] < maxDef) {
                res++;
            }

        }
        return res;
    }
}

以上是关于Leetcode——根据身高重建队列 / 游戏中弱角色的数量 (排序,compare)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0406. 根据身高重建队列

LeetCode406:根据身高重建队列

LeetCode406:根据身高重建队列

[LeetCode-Golang] 406. 根据身高重建队列

leetcode中等406根据身高重建队列

leetcode 406. Queue Reconstruction by Height 根据身高重建队列(中等)