[LeetCode] 0016. 3 最も近い合計

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

中くらい

 


整数配列が与えられた場合 数字 長さの n そして整数 ターゲットで 3 つの整数を見つけます。 数字 合計が最も近くなるように ターゲット.

戻る 3 つの整数の合計.

各入力には正確に 1 つの解があると想定できます。

例 1:

入力: 数値 = [-1,2,1,-4]、ターゲット = 1
出力: 2
説明: ターゲットに最も近い合計は 2 です (-1 + 2 + 1 = 2)。

例 2:

入力: 数値 = [0,0,0]、ターゲット = 1
出力: 0
説明: ターゲットに最も近い合計は 0 です (0 + 0 + 0 = 0)。

制約:

  • 3 <= nums.length <= 500
  • -1000 <= nums[i] <= 1000
  • -10 4 <= ターゲット <= 10 4

パイソン

				
					# 時間計算量: O(n) # 空間計算量: 入力による O(n) import リスト クラス Solution(object): def maxProfit(self, 価格: List[int]) -> int: if len(prices) <= 1 : 0 を返します leftMin = 価格[0] rightMax = 価格[-1] length = len(価格) leftProfits = [0] * 長さ rightProfits = [0] * (length + 1) for l in range(1, length): leftProfits[l] = max(leftProfits[l - 1], 価格[l] - leftMin) leftMin = min(leftMin, 価格[l]) r = 長さ - 1 - l rightProfits[r] = max(rightProfits[r + 1]、rightMax - 価格[r]) rightMax = max(rightMax, 価格[r]) maxProfit = 0 print(leftProfits) print(rightProfits) for i in range(0, length): maxProfit = max(maxProfit, leftProfits[ i] + rightProfits[i + 1]) maxProfit 価格を返す = [7, 1, 5, 3, 6, 4] # leftProfit = [0, 0, 4, 4, 5, 5] # rightProfit = [5, 5] 、3、3、0、0、0] print(Solution().maxProfit(prices))
				
			
ja日本語