[リートコード] 0259.3合計が小さい

Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク

難しい

 


配列が与えられます 価格 どこ 価格[i] は、特定の株式の価格です。  日。

達成できる最大の利益を見つけてください。 最大で 2 つのトランザクション.

注記: 同時に複数の取引を行うことはできません(つまり、株式を再度購入する前に売却する必要があります)。

例 1:

入力: 価格 = [3,3,5,0,0,3,1,4]
出力: 6
説明: 4 日目に購入 (価格 = 0)、6 日目に売却 (価格 = 3)、利益 = 3-0 = 3。その後、7 日目に購入 (価格 = 1)、8 日目に売却 (価格 = 4)、利益= 4-1 = 3。

例 2:

入力: 価格 = [1,2,3,4,5]
出力: 4
説明: 1 日目に買って (価格 = 1)、5 日目に売る (価格 = 5)、利益 = 5-1 = 4。エンゲージメント中であるため、1 日目に買って 2 日目に買って後で売ることはできないことに注意してください。同時に複数の取引を行う場合は、再度購入する前に売却する必要があります。

例 3:

入力: 価格 = [7,6,4,3,1]
出力: 0
説明: この場合、トランザクションは行われません。つまり、最大利益 = 0 となります。

制約:

  • 1 <= 価格.長さ <= 10 5
  • 0 <= 価格[i] <= 10 5

パイソン

				
					# 時間計算量: O(n^2) # 空間完全性: import List クラスの入力による O(1) 解決策: def threeSumSmaller(self, nums: List[int], target: int) -> int: result = 0 nums。 sort() for i in range(len(nums) - 1): result += self.twoSumSmaller(nums, i + 1, target - nums[i]) 結果を返します def twoSumSmaller(self, nums: List[int], startIdx: int, target: int) -> int: left = startIdx right = len(nums) - 1 result = 0 while left < right: if nums[left] + nums[right] < target: result += right - left left += 1 else: right -= 1 結果を返します nums = [-2, 0, 1, 3] target = 2 print(Solution().threeSumSmaller(nums, target))
				
			
ja日本語