题目:
当前是数组是打乱顺序的
people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。
重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)
思路:
贪心算法;
这里有两个指标,一个是身高,一个是前面有几个人,这两个不能同时排,得先顾一个,不然没个章法,不知道以什么为标准排,如果按k来排,以
people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
为例,排完后:
[5,0][7,0][6,1][7,1][5,2][4,4]
还是乱的,所以得按照身高排,从大到小且同一高度时k值小的在前面:
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
然后初始化一个空数组存放重构后的队列,根据第二个指标给插进去
class Solution(object):
def reconstructqueue(self,people):
# print(people)
people.sort(key=lambda x:(-x[0],x[1]))
# print(people)
que = []
for p in people:
que.insert(p[1],p)
return que
# #用sorted和sort效果一样
# num=sorted(people,key=lambda x:(-x[0],x[1]))
# que = []
#
# for p in num:
# #但是sorted是生成新的列表,所以要针对新列表num进行操作,不能写成for p in people
# #sort是直接在原来的列表上改
# que.insert(p[1],p)
# return que
#测试
s = Solution()
people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
k = s.reconstructqueue(people)
print(k)
运行结果: