สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums รายการนี้แสดงโหนดปลายสุดในการข้ามผ่านของต้นไม้ ที่นี่โหนดภายในมีลูก 2 คนและค่าของโหนดนั้นเหมือนกับผลคูณของค่าลีฟที่ใหญ่ที่สุดของทรีย่อยทางซ้าย และค่าลีฟที่ใหญ่ที่สุดของทรีย่อยทางขวา เราต้องหาผลรวมของต้นไม้ที่มีค่าผลรวมขั้นต่ำ
ดังนั้น หากอินพุตเป็น nums =[3, 5, 10] เอาต์พุตจะเป็น 83
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- res :=ผลรวมขององค์ประกอบทั้งหมดเป็น nums
- ในขณะที่ขนาดของ nums> 1 ทำ
- i :=ดัชนีขององค์ประกอบขั้นต่ำของ nums
- ซ้าย :=nums[i - 1] เมื่อ i> 0 ไม่เช่นนั้นอินฟินิตี้
- right :=nums[i + 1] เมื่อ i
- res :=res + (ขั้นต่ำของซ้ายและขวา) * องค์ประกอบ ith ของ nums จากนั้นลบองค์ประกอบ ith ออกจาก nums
- ผลตอบแทน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
class Solution: def solve(self, nums): res = sum(nums) while len(nums) > 1: i = nums.index(min(nums)) left = nums[i - 1] if i > 0 else float("inf") right = nums[i + 1] if i < len(nums) - 1 else float("inf") res += min(left, right) * nums.pop(i) return res ob = Solution() nums = [3, 5, 10] print(ob.solve(nums))
อินพุต
[3, 5, 10]
ผลลัพธ์
83