Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมกู้คิวคนที่สับสนกลับมาใน Python


มีเมทริกซ์แถวละ [height, count] count=คนหน้าที่สูงกว่าหรือเท่า คิวถูกสับ หาลำดับเดิม

เช่น [[2,2],[4,0],[5,0]] ให้ [[4,0],[5,0],[2,2]]

ขั้นตอนการแก้ปัญหา

  • เรียงตาม height น้อยไปมาก, count มากไปน้อย
  • สร้าง ans ขนาด N เติม None
  • สำหรับแต่ละคน (h,c): หาตำแหน่งที่ว่างและมีคนสูงกว่า/เท่าอยู่หน้าพอดี c คน

ตัวอย่างโค้ด

class Solution:
    def solve(self, matrix):
        N = len(matrix)
        matrix.sort(key=lambda x: [x[0], -x[1]])
        ans = [None]*N
        for h,c in matrix:
            temp = 0
            for i,num in enumerate(ans):
                if temp >= c and num is None:
                    ans[i] = [h,c]; break
                if num is None or num[0] >= h: temp += 1
        return ans

ob = Solution()
matrix = [[2,2],[4,0],[5,0]]
print(ob.solve(matrix))

อินพุต

[[2,2],[4,0],[5,0]]

เอาต์พุต

[[4,0], [5,0], [2,2]]