> 文章列表 > 力扣题库刷题笔记406-根据身高重建队列

力扣题库刷题笔记406-根据身高重建队列

力扣题库刷题笔记406-根据身高重建队列

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