Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เวลาที่ดีที่สุดในการซื้อและขายหุ้นใน Python


สมมติว่าเรามีอาร์เรย์ A ในที่นี้ A[i] จะแสดงราคาของหุ้นที่กำหนดในวันที่ i เราต้องหากำไรสูงสุด เราสามารถดำเนินการได้มากสุดหนึ่งรายการ (ธุรกรรมหมายถึงการซื้อและขายหุ้น) แต่เราต้องจำไว้ว่าเราอาจไม่ได้ทำธุรกรรมหลายรายการพร้อมกัน จึงต้องขายหุ้นก่อนซื้อใหม่ครับ

สมมติว่าอาร์เรย์เป็นเหมือน A =[7, 1, 5, 3, 6, 4] แล้วผลลัพธ์จะเป็น 5 อย่างที่เห็น หากเราซื้อในวันที่ 2 (ดัชนี 1) ก็จะได้ 1 เป็น ราคาซื้อ แล้วถ้าเราขายในวันที่ 5 กำไรจะเป็น 6 – 1 =5.

ในการแก้ปัญหานี้ ให้ทำตามขั้นตอนเหล่านี้ -

  • สร้างสองอาร์เรย์ leftMin และ rightMax ของขนาดเดียวกับ A และเติมด้วย 0s
  • leftMin[0] =A[0]
  • สำหรับ i ในช่วง 1 ถึงความยาวของ A – 1, leftMin[i] =ต่ำสุดของ leftMin[i – 1] และ A[i]
  • rightMax[n-1] =A[n – 1]
  • สำหรับ i ในช่วงความยาว A – 1 เหลือ 1, rightMax[i] =สูงสุดของ rightMax[i + 1] และ A[i]
  • กำหนดคำตอบ :=0
  • สำหรับฉันในช่วง 0 ถึงความยาวของ A – 1 ตอบ :=สูงสุดของคำตอบและ rightMax[i + 1] – leftMin[i]
  • ส่งคืนคำตอบ

มาดูการใช้งานกันให้เกิดความเข้าใจกันมากขึ้น

ตัวอย่าง

class Solution(object):
   def maxProfit(self, prices):
      """
      :type prices: List[int]
      :rtype: int
      """
      if not prices:
         return 0
      leftMin,rightMax = [0 for i in range(len(prices))],[0 for i in range(len(prices))]
      leftMin[0] = prices[0]
      for i in range(1,len(prices)):
         leftMin[i] = min(leftMin[i-1],prices[i])
      #print(leftMin)
      rightMax[-1]= prices[-1]
      for i in range(len(prices)-2,-1,-1):
         rightMax[i] = max(rightMax[i+1],prices[i])
      #print(rightMax)
      ans = 0
      for i in range(len(prices)-1):
         ans = max(ans,rightMax[i+1]-leftMin[i])
      return ans
ob1 = Solution()
print(ob1.maxProfit([7,2,5,8,6,3,1,4,5,4,7]))

อินพุต

prices = [7,2,5,8,6,3,1,4,5,4,7]

ผลลัพธ์

6