1671。製作山陣的最少移除次數
難度:難
主題:陣列、二分查找、動態規劃、貪心
你可能還記得,陣列 arr 是一個 山數組 當且僅當:
給定一個整數數組 nums,返回要刪除的最小個元素,以使 nums 成為山數組
。範例1:
範例2:
約束:
提示:
解:
我們可以使用動態規劃方法,其思想是找到最大山子序列,而不是直接計算要刪除的元素。此方法是基於為數組中的每個位置找到兩個最長遞增子序列(LIS):一個為從左到右,另一個為從右到-離開
。一旦我們有了盡可能長的山子序列,原始數組長度和該子序列長度之間的差異將為我們提供要刪除的最少元素。辨識增加的子序列長度
:辨識遞減的子序列長度
:計算最大山長:
得到最小移除量:
讓我們用 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中文網其他相關文章!