1574。删除最短子数组以使数组排序
难度:中等
主题:数组、两个指针、二分查找、堆栈、单调堆栈
给定一个整数数组 arr,从 arr 中删除一个子数组(可以为空),使得 arr 中的剩余元素非递减。
返回要删除的最短子数组的长度.
子数组是数组的连续子序列。
示例1:
示例2:
示例 3:
约束:
提示:
解决方案:
我们可以使用排序和二分搜索技术。计划如下:
双指针方法:
单调堆栈:
步骤:
优化:
让我们用 PHP 实现这个解决方案:1574。要删除以使数组排序的最短子数组
<?php /** * @param Integer[] $arr * @return Integer */ function shortestSubarrayToRemove($arr) { ... ... ... /** * go to ./solution.php */ } // Test cases echo shortestSubarrayToRemove([1, 2, 3, 10, 4, 2, 3, 5]) . "\n"; // Output: 3 echo shortestSubarrayToRemove([5, 4, 3, 2, 1]) . "\n"; // Output: 4 echo shortestSubarrayToRemove([1, 2, 3]) . "\n"; // Output: 0 ?>
最长非递减前缀和后缀:
初始最小移除:
合并前缀和后缀:
返回结果:
该解决方案可以有效地找到要删除的最短子数组,从而使用两指针技术对数组进行排序,并且可以处理最多 10^5 个元素的约束的大型数组。
联系链接
如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!
如果您想要更多类似的有用内容,请随时关注我:
以上是要删除以使数组排序的最短子数组的详细内容。更多信息请关注PHP中文网其他相关文章!