leetcode 力扣 406 根据身高重建队列

35 阅读1分钟

思维题

其实答案隐藏在题目里:
每个people[i] = [hi, ki]表示第i个人的身高为hi,前面正好有ki个身高大于或等于hi的人。

  • 前面正好有ki个身高大于或等于hi的人:说明应该将身高从高到低排序,而不是低到高排序。
  • 身高相同:因为是身高大于或等于,所以按照ki小到大排序。
  • ki提前设计好的,按照ki进行索引插入即可。
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方便插入
        List<int[]> res = new ArrayList<>();
        for (int[] person : people) {
            res.add(person[1], person);
        }

        return res.toArray(new int[res.size()][]);
    }
}