สมมติว่าเรามีอาร์เรย์ A ที่ A[i] แสดงราคาหุ้นในวันที่ i เราต้องหากำไรสูงสุด เราสามารถทำธุรกรรมได้มากเท่าที่ต้องการ (ธุรกรรมหมายถึงซื้อและขายหุ้น) แต่ต้องจำว่าไม่สามารถทำธุรกรรมหลายอย่างพร้อมกันได้ ต้องขายหุ้นก่อนจึงจะซื้อใหม่ได้
สมมติอาร์เรย์เป็น A = [7, 1, 5, 3, 6, 4] ผลลัพธ์จะเป็น 7 เราสามารถเห็นได้ว่าถ้าซื้อวันที่ 2 (ดัชนี 1) ราคาซื้อ 1 แล้วขายวันที่ 3 กำไร 5 - 1 = 4 แล้วซื้อวันที่ 4 ขายวันที่ 5 กำไร 6 - 3 = 3
วิธีการแก้ปัญหา
- ให้ answer = 0
- สำหรับ i ในช่วง 0 ถึง n - 1 (n คือจำนวนองค์ประกอบใน A):
- ถ้า A[i] - A[i - 1] > 0:
- answer := answer + A[i] - A[i - 1]
- ถ้า A[i] - A[i - 1] > 0:
- คืนค่า answer
ตัวอย่าง
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
ans = 0
for i in range(1, len(prices)):
if prices[i] - prices[i-1] > 0:
ans += (prices[i] - prices[i-1])
return ans
ob1 = Solution()
print(ob1.maxProfit([7,2,5,8,6,3,1,4,5,4,7]))
อินพุต
print(ob1.maxProfit([7,2,5,8,6,3,1,4,5,4,7]))
เอาต์พุต
13