假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
class Solution:
def reconstructQueue(self, people):
num = sorted(people,key=lambda x:(-x[0],x[1]))
for index,i in enumerate(num):
if i[1] < index :
num.insert(i[1],num.pop(index))
return num
这题主要是找规律
按身高降序,位置升序对列表进行排序:
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
--------------------------------------------------
逐个调整位置
[7, 0]当前位置0小等于要调整位置0,不动
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
[7, 1]当前位置1小等于要调整位置1,不动
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
[6, 1]当前位置2大于要调整位置1,调整到要调整的位置
[[7, 0], [6, 1], [7, 1], [5, 0], [5, 2], [4, 4]]
[5, 0]当前位置3大于要调整位置0,调整到要调整的位置
[[5, 0], [7, 0], [6, 1], [7, 1], [5, 2], [4, 4]]
[5, 2]当前位置4大于要调整位置2,调整到要调整的位置
[[5, 0], [7, 0], [5, 2], [6, 1], [7, 1], [4, 4]]
[4, 4]当前位置5大于要调整位置4,调整到要调整的位置
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]
[[5, 0], [7, 0], [5, 2], [6, 1], [4, 4], [7, 1]]