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

โปรแกรมหากำไรสูงสุดหลังจากซื้อและขายหุ้นสูงสุดสองครั้งใน python


สมมุติว่าเรามีรายการตัวเลขที่เรียกว่าราคา และนั่นเป็นการแสดงราคาหุ้นของบริษัทหนึ่งๆ ตามลำดับ เราต้องหากำไรสูงสุดที่เราสามารถทำได้จากการซื้อและขายหุ้นนั้นไม่เกินสองครั้ง เราต้องซื้อก่อนแล้วค่อยขาย

ดังนั้นหากอินพุตเป็นเหมือนราคา =[2, 6, 3, 4, 2, 9] แล้วผลลัพธ์จะเป็น 11 เนื่องจากเราสามารถซื้อได้ที่ราคา 2 จากนั้นขายที่ 6 ซื้ออีกครั้งที่ 2 แล้วขาย เวลา 9.

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

  • first_buy :=-inf, first_sell :=-inf
  • second_buy :=-inf, second_sell :=-inf
  • สำหรับราคาแต่ละพิกเซล ทำ
    • first_buy :=สูงสุดของ first_buy และ -px
    • first_sell :=สูงสุดของ first_sell และ (first_buy + px)
    • second_buy :=สูงสุดของ second_buy และ (first_sell - px)
    • second_sell :=สูงสุดของ second_sell และ (second_buy + px)
  • ผลตอบแทนสูงสุด 0, first_sell และ second_sell

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, prices):
      first_buy = first_sell = float("-inf")
      second_buy = second_sell = float("-inf")
      for px in prices:
         first_buy = max(first_buy, -px)
         first_sell = max(first_sell, first_buy + px)
         second_buy = max(second_buy, first_sell - px)
         second_sell = max(second_sell, second_buy + px)
      return max(0, first_sell, second_sell)

ob = Solution()
prices = [2, 6, 3, 4, 2, 9]
print(ob.solve(prices))

อินพุต

[2, 6, 3, 4, 2, 9]

ผลลัพธ์

11