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

ย้ายศูนย์ไปท้ายลิสต์แบบ In-place ใน Python

สมมติว่าเรามีรายการตัวเลข nums เราต้องวางศูนย์ทั้งหมดไปที่ท้ายรายการโดยอัปเดตรายการแบบ in-place และลำดับสัมพัทธ์ขององค์ประกอบอื่นๆ ไม่ควรเปลี่ยนแปลง ควรพยายามแก้ในพื้นที่เพิ่มเติม O(1)

ตัวอย่าง

หากอินพุตคือ [2,0,1,4,0,5,6,4,0,1,7] ผลลัพธ์จะเป็น [2, 1, 4, 5, 6, 4, 1, 7, 0, 0, 0]

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

  1. ถ้าขนาดของ L เท่ากับ 0 ให้คืนค่ารายการว่าง
  2. k := 0
  3. ลูป i จาก 0 ถึงขนาดของ L:
    • ถ้า L[i] ไม่เท่ากับ 0:
      • L[k] := L[i]
      • k := k + 1
  4. ลูป j จาก k ถึงขนาดของ L:
    • L[j] := 0
  5. คืนค่า L

การใช้งาน

class Solution:
    def solve(self, L):
        if len(L) == 0:
            return []
        k = 0
        for i in range(len(L)):
            if L[i] != 0:
                L[k] = L[i]
                k += 1
        for j in range(k, len(L)):
            L[j] = 0
        return L

ob = Solution()
L = [2, 0, 1, 4, 0, 5, 6, 4, 0, 1, 7]
print(ob.solve(L))

อินพุต

[2,0,1,4,0,5,6,4,0,1,7]

เอาต์พุต

[2, 1, 4, 5, 6, 4, 1, 7, 0, 0, 0]