สมมติว่าเรามีรายการตัวเลขชื่อ nums แสดงราคาหุ้นของบริษัทตามลำดับเวลา เราสามารถซื้อได้สูงสุด 1 หุ้นต่อวัน แต่สามารถถือหุ้นหลายหุ้น และขายได้ในวันใดก็ได้ จำนวนวันไม่จำกัด คืนค่ากำไรสูงสุดที่ทำได้
เช่น ถ้าอินพุตคือ nums = [3, 4, 7, 3, 5] ผลลัพธ์จะเป็น 9 เพราะซื้อที่ 3 และ 4 แล้วขายที่ 7 แล้วซื้อที่ 3 ขายที่ 5 กำไรรวม (7-3) + (7-4) + (5-3) = 9
ขั้นตอนการแก้ปัญหา
ans := 0- ในขณะที่
numsไม่ว่าง:top := นำสมาชิกสุดท้ายออกจาก nums- ในขณะที่
numsไม่ว่าง และtop > nums[-1]:ans := ans + (top - nums.pop())
- คืนค่า
ans
ตัวอย่างการใช้งาน
def solve(nums):
ans = 0
while nums:
top = nums.pop()
while nums and top > nums[-1]:
ans += top - nums.pop()
return ans
nums = [3, 4, 7, 3, 5]
print(solve(nums))
อินพุต
[3, 4, 7, 3, 5]
เอาต์พุต
9