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

โปรแกรม Python เช็คว่าเราซ้อนคิวบ์ได้หรือไม่


สมมติว่าเรามีจำนวนอาร์เรย์ที่มีลูกบาศก์ที่แตกต่างกัน n ก้อน พวกมันจะถูกวางในแนวนอน เราต้องสร้างกองลูกบาศก์ในแนวตั้ง คิวบ์ใหม่ควรเป็นไปตาม −

  • ถ้าคิวบ์ ith อยู่บนคิวบ์ที่ j ความยาวด้านของ jth จะต้องมากกว่าหรือเท่ากับความยาวด้านของ ith หนึ่ง

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

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

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของ nums
  • d :=สร้างคิวสองสิ้นสุดจากองค์ประกอบของ nums
  • flag :=จริง
  • ก่อนหน้า :=0
  • ในขณะที่ d ไม่ว่างเปล่า ทำ
    • ก่อน :=d[0]
    • สุดท้าย :=d[n-1]
    • หาก prev ไม่เหมือนกับ 0 และ (first> prev หรือ last> prev) แล้ว
      • ธง :=เท็จ
      • ออกมาจากวงจร
    • ถ้าก่อน>=สุดท้ายแล้ว
      • prev :=เหลือรายการ d และลบออกจาก d
    • มิฉะนั้น
      • prev :=รายการสุดท้ายของ d และลบออกจาก d
  • ถ้าแฟล็กเป็นจริง
    • คืนค่า True
  • มิฉะนั้น
    • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

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