美文网首页
[刷题防痴呆] 0406 - 根据身高重建队列 (Queue R

[刷题防痴呆] 0406 - 根据身高重建队列 (Queue R

作者: 西出玉门东望长安 | 来源:发表于2022-01-05 01:30 被阅读0次

题目地址

https://leetcode.com/problems/queue-reconstruction-by-height/

题目描述

406. Queue Reconstruction by Height

You are given an array of people, people, which are the attributes of some people in a queue (not necessarily in order). Each people[i] = [hi, ki] represents the ith person of height hi with exactly ki other people in front who have a height greater than or equal to hi.

Reconstruct and return the queue that is represented by the input array people. The returned queue should be formatted as an array queue, where queue[j] = [hj, kj] is the attributes of the jth person in the queue (queue[0] is the person at the front of the queue).

 

Example 1:

Input: people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
Output: [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
Explanation:
Person 0 has height 5 with no other people taller or the same height in front.
Person 1 has height 7 with no other people taller or the same height in front.
Person 2 has height 5 with two persons taller or the same height in front, which is person 0 and 1.
Person 3 has height 6 with one person taller or the same height in front, which is person 1.
Person 4 has height 4 with four people taller or the same height in front, which are people 0, 1, 2, and 3.
Person 5 has height 7 with one person taller or the same height in front, which is person 1.
Hence [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] is the reconstructed queue.
Example 2:

Input: people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
Output: [[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

思路

  • 贪心.
  • 从高到低排列, 如果height一样, 按位置顺序排列.
  • 之后按照对应的顺序插入.

关键点

  • res.toArray(new int[res.size()][2]).

代码

  • 语言支持:Java
class Solution {
    public int[][] reconstructQueue(int[][] people) {
        if (people == null || people.length == 0) {
            return people;
        }
        Arrays.sort(people, (a, b) -> {
            if (a[0] == b[0]) {
                return a[1] - b[1];
            }
            return b[0] - a[0];
        });

        List<int[]> res = new ArrayList<>();
        for (int[] arr: people) {
            int index = arr[1];
            res.add(index, arr);
        }
        return res.toArray(new int[res.size()][2]);
    }
}

相关文章

网友评论

      本文标题:[刷题防痴呆] 0406 - 根据身高重建队列 (Queue R

      本文链接:https://www.haomeiwen.com/subject/mjzcqrtx.html