1671年。山配列を作成するための最小除去数
難易度: 難しい
トピック: 配列、二分探索、動的計画法、貪欲
次の場合に限り、配列 arr が マウンテン配列 であることを思い出してください。
整数配列 nums を指定すると、nums を 山配列にするために削除する要素の最小数を返します。
例 1:
例 2:
制約:
ヒント:
解決策:
削除する要素を直接カウントするのではなく、最大の山の部分列を見つけるというアイデアを持つ動的プログラミング アプローチを使用できます。このアプローチは、配列内の各位置に対して 2 つの 最長増加サブシーケンス (LIS) を見つけることに基づいています。1 つは 左から右 に進み、もう 1 つは 右から右に進みます。左。可能な限り長い山のサブシーケンスが得られたら、元の配列の長さとこのサブシーケンスの長さの差により、削除する最小限の要素が得られます。
増大するサブシーケンスの長さを特定する:
減少するサブシーケンスの長さを特定する:
山の最大長を計算します:
最小限の除去を取得します:
このソリューションを PHP で実装してみましょう: 1671。山配列を作成するための最小除去数
<?php /** * @param Integer[] $nums * @return Integer */ function minimumMountainRemovals($nums) { ... ... ... /** * go to ./solution.php */ } // Example usage $nums1 = [1, 3, 1]; echo minimumMountainRemovals($nums1); // Output: 0 $nums2 = [2, 1, 1, 5, 6, 2, 3, 1]; echo minimumMountainRemovals($nums2); // Output: 3 ?>
左 LIS 計算:
正しい LIS 計算:
山の計算:
最終計算:
このソリューションにより、最大の山の部分列が見つかり、山の配列を達成するために必要な最小限の除去が計算されます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が山配列を作成するための最小除去数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。