假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对 (h, k)
表示,其中 h
是这个人的身高,k
是应该排在这个人前面且身高大于或等于 h
的人数。 例如:[5,2] 表示前面应该有 2 个身高大于等于 5 的人,而 [5,0] 表示前面不应该存在身高大于等于 5 的人。
编写一个算法,根据每个人的身高 h
重建这个队列,使之满足每个整数对 (h, k)
中对人数 k
的要求。
示例:
输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
提示:
- 总人数少于 1100 人。
**难度**: Medium
**标签**: 贪心算法、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:48 ms, 在所有 Python3 提交中击败了98.07% 的用户
内存消耗:13.9 MB, 在所有 Python3 提交中击败了74.27% 的用户
解题思路:
[h, k] 表示,其中 h 是这个人的身高,k 是应该排在这个人前面且身高大于或等于 h 的人数
[[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
先进行排序,按照h从高到低,k从小到大排列
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
然后依次插入结果即可
后插入的必定比先插入的个子低,所以,此时按照k插入即可
"""
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
people.sort(key=lambda x:(-x[0], x[1])) # 按个头从高到低,前面人数从少到多排序
result = []
for p in people:
result.insert(p[1], p) # 依次按照前面高个子数量插入列表
return result