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))