首页 后端开发 php教程 制作山脉阵列的最少移除次数

制作山脉阵列的最少移除次数

Nov 01, 2024 am 07:33 AM

Minimum Number of Removals to Make Mountain Array

1671。制作山阵的最少移除次数

难度:

主题:数组、二分查找、动态规划、贪心

你可能还记得,数组 arr 是一个 山数组 当且仅当:

  • arr.length >= 3
  • 存在一些索引 i (0-indexed),其中 0
  • arr[0] arr[i]> arr[i 1] > ...>> arr[arr.length - 1]

给定一个整数数组 nums,返回要删除的最小个元素,以使 nums 成为山数组

示例1:

  • 输入:
  • nums = [1,3,1]
  • 输出:
  • 0
  • 说明:
  • 数组本身就是一个山数组,所以我们不需要删除任何元素。

示例2:

  • 输入:
  • nums = [2,1,1,5,6,2,3,1]
  • 输出:
  • 3
  • 解释:
  • 一种解决方案是删除索引 0、1 和 5 处的元素,使数组 nums = [1,5,6,3,1]。

约束:

  • 3 1 9
  • 保证你可以用nums制作一个山形数组。

提示:

  1. 考虑相反的方向而不是最小元素来删除最大山子序列
  2. 想想 LIS,它有点接近

解决方案:

我们可以使用动态规划方法,其思想是找到最大山子序列,而不是直接计算要删除的元素。这种方法基于为数组中的每个位置找到两个最长递增子序列(LIS):一个为从左到右,另一个为从右到-离开

。一旦我们有了尽可能长的山子序列,原始数组长度和该子序列长度之间的差异将为我们提供要删除的最少元素。

解决方案概要
  1. 识别增加的子序列长度

    :
    • 计算 leftLIS 数组,其中 leftLIS[i] 表示以 i 结尾的最长递增子序列的长度(从左到右)。
  2. 识别递减的子序列长度

    :
    • 计算rightLIS数组,其中rightLIS[i]表示从i开始(从右到左)的最长递减子序列的长度。
  3. 计算最大山长:

    • 对于每个索引 i,其中 0 1 且 rightLIS[i] > 1)。计算 i 处的山长为 leftLIS[i] rightLIS[i] - 1.
  4. 获得最小移除量

    • 要删除的最小元素将是原始数组长度减去找到的最长山的长度。

让我们用 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
?>
登录后复制

解释:

  1. 左LIS计算:

    • leftLIS[i] 存储以 i 结尾的递增子序列的最大长度。我们迭代每个 i,对于每个 i,从 0 迭代到 i-1,找到以 i 结尾的最长子序列。
  2. 正确的 LIS 计算:

    • rightLIS[i] 存储从 i 开始的递减子序列的最大长度。我们从 n-2 向后迭代到 0,对于每个 i,从 n-1 向下迭代到 i 1 以找到从 i 开始的最长子序列。
  3. 山脉计算:

    • 索引 i 处的有效峰值必须具有 leftLIS[i] > 1 且右LIS[i]> 1. 峰位于 i 的山的长度为 leftLIS[i] rightLIS[i] - 1.
  4. 最终计算

    • 所需的最小移除量是原始数组长度与找到的最大山体长度之间的差值。

复杂性分析

  • 时间复杂度O(n2),由于LIS计算中的双循环。
  • 空间复杂度O(n),用于存储leftLIS和rightLIS数组。

该解决方案确保我们找到最大的山脉子序列并计算实现山脉阵列所需的最小移除量。

联系链接

如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!

如果您想要更多类似的有用内容,请随时关注我:

  • 领英
  • GitHub

以上是制作山脉阵列的最少移除次数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

11个最佳PHP URL缩短脚本(免费和高级)

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

Instagram API简介

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

在Laravel中使用Flash会话数据

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

构建具有Laravel后端的React应用程序:第2部分,React

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

简化的HTTP响应在Laravel测试中模拟了

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

php中的卷曲:如何在REST API中使用PHP卷曲扩展

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

在Codecanyon上的12个最佳PHP聊天脚本

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

宣布 2025 年 PHP 形势调查

See all articles