1、题目如下:
2、个人Python代码实现
这里需要单独备注一下截图中第21行代码:
上图可以看到,已经对[5, 2]等元素进行了遍历循环,且[5, 2]左侧确实只存在[7, 0][6, 1]两个元素身高高于他,但是继续[5,0]循环完成后,[5,2]前方就存在了3个元素大于等于5了:
代码如下:
class Solution:
def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
people.sort(reverse=True) #列表按照第一个元素降序、第二个元素升序排序
time = 0 #用于控制循环次数
while time < len(people): #外部循环,每次从people[0]开始遍历所有元素
for i in range(len(people)): #内部循环遍历所有元素
total = 0
#通过遍历,求得people[0][0]到people[i-1][0]大于people[i][0]的元素个数,并负责给total
#用题目的话来讲,前方有total个身高更高或者相同的人在当前编号前面
for j in range(i):
if people[j][0] >= people[i][0]:
total += 1
#当前元素前方存在身高比他高的人数如果小于total,该元素应该往左移
while people[i][1] < total:
people[i], people[i - 1] = people[i - 1], people[i]
#元素左移以后,total应该-1
total -= 1
#people[i]左移以后下标减一,然后继续判断是否小于total
i -= 1
#如果本次进入循环,则需要退出内部循环,继续从people[0]开始循环
time = 0
#如果没有交换元素,则循环次数+1,当循环次数等于len(people)时,代表所有元素已被遍历,退出循环
time += 1
return people