สมมติว่าเรามีรายการราคาหุ้นของบริษัทตามลำดับเวลา เราต้องหากำไรสูงสุดที่เราสามารถทำได้จากการซื้อและขายหุ้น เราต้องซื้อก่อนขาย และเราต้องรอหนึ่งวันหลังจากขายหุ้นก่อนซื้อใหม่
ดังนั้นหากอินพุตเป็นเหมือนราคา =[2, 6, 9, 4, 11] แล้วผลลัพธ์จะเป็น 11 ตามที่เราสามารถซื้อได้ที่ 2 แล้วขายที่ 6 รอวันแล้วซื้อที่ 4 และ แล้วขายตอน 11 โมง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
s :=0
-
b :=-อินฟินิตี้
-
สำหรับผมอยู่ในช่วง 0 ถึงขนาดของราคาทำ
-
อุณหภูมิ :=b
-
b :=สูงสุดของ b และ (s - ราคา[i])
-
ถ้าฉันไม่เป็นศูนย์แล้ว
-
s :=สูงสุดของ s และ (ชั่วคราว + ราคา[i - 1])
-
-
-
คืนค่าสูงสุดของ s และ (b + องค์ประกอบสุดท้ายของราคา)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ตัวอย่าง
class Solution:
def solve(self, prices):
s = 0
b = float("-inf")
for i in range(len(prices)):
temp = b
b = max(b, s - prices[i])
if i:
s = max(s, temp + prices[i - 1])
return max(s, b + prices[-1])
ob = Solution()
prices = [2, 6, 9, 4, 11]
print(ob.solve(prices)) อินพุต
[2, 6, 9, 4, 11]
ผลลัพธ์
11