สมมติว่าเรามีอาร์เรย์ที่องค์ประกอบ ith แสดงถึงราคาของหุ้นที่กำหนดในวันที่ i เราต้องสร้างอัลกอริทึมเพื่อหากำไรสูงสุด เราสามารถทำธุรกรรมได้ไม่เกินสองรายการ ดังนั้นหากราคาที่กำหนดคือ [3,3,5,0,1,3,1,4] ผลลัพธ์จะเป็น 6 เนื่องจากเราจะซื้อในวันที่ 4 (ราคา 0) แล้วขายในวันที่ 6 ( ราคา 3) ดังนั้นกำไรคือ 3 – 0 =3 ตอนนี้ แต่ในวันที่ 7 (ราคา 1) และขายในวันที่ 8 (ราคา 4) ดังนั้นกำไรคือ 4 – 1 =3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n :=ขนาดของ s , m :=ขนาดของ t อัปเดต s และ t โดยการต่อช่องว่างก่อนหน้านั้น
-
สร้างเมทริกซ์ขนาดหนึ่ง (n + 1) x (m + 1)
-
set dp[0, 0] :=1 จากนั้นตั้งค่า 1 สำหรับคอลัมน์ที่ 0 ของแถวทั้งหมด ใส่ 1
-
สำหรับฉันอยู่ในช่วง 1 ถึง n
-
สำหรับ j ในช่วง 1 ถึง m
-
ถ้า s[i] =t[j] แล้ว
-
dp[i, j] :=dp[i – 1, j – 1]
-
-
dp[i, j] :=dp[i, j] + dp[i – 1, j]
-
-
-
กลับ dp[n, m]
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object): def maxProfit(self, p): if not p: return 0 n = len(p) dp = [0 for i in range(n)] ans = 0 xmin = p[0] for i in range(1,n): xmin = min(xmin,p[i]) dp[i] = max(dp[i],p[i]-xmin) ans = max(ans,dp[i]) xmax = [0 for i in range(n)] xmax[-1] =p[-1] tempp = 0 for i in range(n-2,-1,-1): xmax[i] = max(xmax[i+1],p[i]) xmin = [p[-1],n] for i in range(n-2,-1,-1): tempp = max(tempp,xmax[i+1]-p[i+1]) ans = max(ans,dp[i]+tempp) return ans ob = Solution() print(ob.maxProfit([3,3,5,0,1,3,1,4]))
อินพุต
[3,3,5,0,1,3,1,4]
ผลลัพธ์
6