689。 3 つの重複しないサブ配列の最大合計
難易度: 難しい
トピック: 配列、動的プログラミング
整数配列 nums と整数 k を指定すると、合計が最大となる長さ k の重複しない部分配列を 3 つ見つけて返します。
結果を各間隔の開始位置を表すインデックスのリストとして返します (0-indexed)。複数の答えがある場合は、辞書順に最小のものを返します。
例 1:
例 2:
制約:
解決策:
動的プログラミングのアプローチを使用します。このアイデアは、問題をより小さな部分問題に分割し、部分配列の重複を利用して、長さ k の重複しない 3 つの部分配列の最大合計を効率的に計算することです。
長さ k の部分配列の合計を事前計算します:
動的プログラミング (DP):
最大合計を反復して計算します:
辞書順:
このソリューションを PHP で実装してみましょう: 689。 3 つの重複しないサブ配列の最大合計
<?php /** * @param Integer[] $nums * @param Integer $k * @return Integer[] */ function maxSumOfThreeSubarrays($nums, $k) { ... ... ... /** * go to ./solution.php */ } // Test cases print_r(maxSumOfThreeSubarrays([1,2,1,2,6,7,5,1], 2)); // [0, 3, 5] print_r(maxSumOfThreeSubarrays([1,2,1,2,1,2,1,2,1], 2)); // [0, 2, 4] ?>
サブ配列の合計の計算:
左右の配列:
最終計算:
辞書編集的に最小の答え:
入力用:
$nums = [1, 2, 1, 2, 6, 7, 5, 1]; $k = 2;
出力は次のようになります:
[0, 3, 5]
このアプローチにより、時間計算量が効率的に維持され、時間計算量は約 O(n) になります。ここで、n は入力配列 nums の長さです。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。重複するサブ配列の最大合計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。