สมมติว่าเรามีจำนวนอาร์เรย์ที่มีลูกบาศก์ที่แตกต่างกัน 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