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

โปรแกรมตรวจสอบว่าสามารถซ้อนลูกบาศก์ได้หรือไม่ใน Python

สมมติว่าเรามีอาเรย์ nums ที่เก็บขนาดของ n ลูกบาศก์ต่างกัน วางในแนวนอน เราต้องทำกองลูกบาศก์ในแนวตั้ง ลูกบาศก์ใหม่ต้องปฏิบัติตามกฎ: หากลูกบาศก์ที่ i อยู่บนลูกบาศก์ที่ j ด้านข้างของ j ต้องมากกว่าหรือเท่ากับด้านข้างของ i

เมื่อทำกองแนวตั้ง เราสามารถหยิบลูกบาศก์ได้เฉพาะจากด้านซ้ายหรือขวาเท่านั้น ไม่ได้จากกลาง เราต้องตรวจสอบว่าสามารถซ้อนได้หรือไม่

ตัวอย่างเช่น หาก nums = [1,2,3,7,8] ผลลัพธ์จะเป็น True เพราะเราสามารถหยิบจากขวาไปซ้ายเพื่อซ้อนได้สำเร็จ

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

  • n := ขนาดของ nums
  • d := สร้าง double-ended queue (deque) จากสมาชิกของ nums
  • flag := True
  • prev := 0
  • while d ไม่ว่าง:
    • first := d[0], last := d[-1]
    • ถ้า prev != 0 และ (first > prev หรือ last > prev): flag := False, ออกจากลูป
    • ถ้า first >= last: prev := d.popleft()
    • มิฉะนั้น: prev := d.pop()
  • ถ้า flag เป็น True: คืนค่า True มิฉะนั้นคืนค่า False

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

from collections import deque

def solve(nums):
    n = len(nums)
    d = deque(nums)
    flag = True
    prev = 0
    while d:
        first = d[0]
        last = d[-1]
        if prev != 0 and (first > prev or last > prev):
            flag = False
            break
        if first >= last:
            prev = d.popleft()
        else:
            prev = d.pop()
    if flag:
        return True
    else:
        return False

nums = [1,2,3,7,8]
print(solve(nums))

อินพุต

[1,2,3,7,8]

เอาต์พุต

True