Queue Reconstruction by Height
Suppose you have a random list of people standing in a queue. Each person is described by a pair of integers (h, k), where h is the height of the person and k is the number of people in front of this person who have a height greater than or equal to h. Write an algorithm to reconstruct the queue.
Note:
The number of people is less than 1,100.
Example
Input:
[[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]]
Python3 Solution:
思路:
1、先挑选出最高的一群人并对其进行排序得到序列res,因为没有人比他们更高,所以他们的下标就和他们的k值相等。
2、找到第二高的一群人,根据他们的k值插入到res中
……以此类推。
代码:
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
if not people: return []
# obtain everyone's info
# key=height, value=k-value, index in original array
peopledct, height, res = {}, [], []
for i in range(len(people)): # 按身高分成一群一群的人,以字典的形式存储在peopledct中;并将所有的身高存放在height中
p = people[i]
if p[0] in peopledct:
peopledct[p[0]] += (p[1], i),
else:
peopledct[p[0]] = [(p[1], i)]
height += p[0],
height.sort() # 对身高进行排序
# sort from the tallest group
for h in height[::-1]:
peopledct[h].sort()
for p in peopledct[h]:
res.insert(p[0], people[p[1]])
return res