当前位置: 首页 > news >正文

2026-05-26:移除前缀使数组严格递增。用go语言,给定整数数组 nums,你可以从数组开头“删掉一段连续的前缀”(前缀长度可以为 0)。要求删除后剩下的部分必须是严格递增的(即剩余数组中任意相

2026-05-26:移除前缀使数组严格递增。用go语言,给定整数数组 nums,你可以从数组开头“删掉一段连续的前缀”(前缀长度可以为 0)。要求删除后剩下的部分必须是严格递增的(即剩余数组中任意相邻两项满足后者 > 前者)。在满足条件的前提下,返回“需要删除的前缀”的最小长度。

1 <= nums.length <= 100000。

-1000000000 <= nums[i] <= 1000000000。

输入: nums = [1,-1,2,3,3,4,5]。

输出: 4。

解释:

移除前缀 prefix = [1, -1, 2, 3] 后,剩余数组为 [3, 4, 5],严格递增。

题目来自力扣3818。

算法执行详细过程

第一步:明确核心目标

我们需要找到最短的需要删除的前缀长度,使得删除后剩余的数组是严格递增(后一个数 > 前一个数)。
核心思路:从后往前遍历数组,找到最长的、满足严格递增的后缀子数组,剩下的前面部分就是需要删除的最短前缀。

第二步:确定数组基础信息

数组长度:7
数组元素索引:0:1,1:-1,2:2,3:3,4:3,5:4,6:5

第三步:从后往前遍历数组(核心判断步骤)

遍历规则:从数组最后一个元素开始,向前逐个检查相邻两个元素是否满足严格递增(后一个 > 前一个),一旦发现不满足,立即确定结果。

  1. 检查索引 5 和 6:元素是 4 和 5
    4 < 5,满足严格递增,继续向前检查。
  2. 检查索引 4 和 5:元素是 3 和 4
    3 < 4,满足严格递增,继续向前检查。
  3. 检查索引 3 和 4:元素是 3 和 3
    3 不小于 3,不满足严格递增,遍历终止。

第四步:计算需要删除的最短前缀长度

遍历终止时,当前索引是4,代码返回的值就是需要删除的前缀长度 = 4

第五步:验证结果正确性

删除长度为4的前缀:移除索引0、1、2、3的元素[1, -1, 2, 3]
剩余数组:[3, 4, 5],满足严格递增,且这是最短的删除长度。


时间复杂度 & 额外空间复杂度

1. 时间复杂度

  • 算法只执行了一次从后往前的单循环遍历,遍历次数最多等于数组长度n
  • 没有嵌套循环、没有递归,所有操作都是常数级O(1)
  • 总时间复杂度:O(n)(n 为数组长度)。

2. 额外空间复杂度

  • 算法全程没有创建任何新的数组/集合,只使用了几个临时变量(循环变量、返回值)。
  • 额外占用的内存空间与输入数组长度无关,是固定大小。
  • 总额外空间复杂度:O(1)

总结

  1. 执行过程:从后往前遍历数组,找到第一个不满足严格递增的相邻位置,该位置的索引就是需要删除的最短前缀长度;
  2. 时间复杂度:O(n),高效适配题目 10万长度的数组要求;
  3. 额外空间复杂度:O(1),原地计算,无额外内存开销。

Go完整代码如下:

packagemainimport("fmt")funcminimumPrefixLength(nums[]int)int{fori:=len(nums)-1;i>0;i--{ifnums[i-1]>=nums[i]{returni// 移除前缀 [0, i-1],长度为 i}}return0}funcmain(){nums:=[]int{1,-1,2,3,3,4,5}result:=minimumPrefixLength(nums)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-defminimum_prefix_length(nums):foriinrange(len(nums)-1,0,-1):ifnums[i-1]>=nums[i]:returni# 移除前缀 [0, i-1],长度为 ireturn0defmain():nums=[1,-1,2,3,3,4,5]result=minimum_prefix_length(nums)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<vector>intminimumPrefixLength(conststd::vector<int>&nums){for(inti=nums.size()-1;i>0;i--){if(nums[i-1]>=nums[i]){returni;// 移除前缀 [0, i-1],长度为 i}}return0;}intmain(){std::vector<int>nums={1,-1,2,3,3,4,5};intresult=minimumPrefixLength(nums);std::cout<<result<<std::endl;return0;}

http://www.jsqmd.com/news/887412/

相关文章:

  • 若依框架TagView切换总刷新?别慌,先检查这两个命名规则(附代码示例)
  • 2026年5月国内专业水泥电杆底盘供应商排行:高压水泥电线杆、高强度水泥电杆、高强度水泥电线杆、低压水泥电线杆选择指南 - 优质品牌商家
  • 为 Hermes Agent 框架配置自定义 Taotoken 模型提供商
  • 手把手教你用Python从Excel读取数据,完成K-Means聚类并画出酷炫3D散点图
  • 2026年5月行业观察:莆田可靠的LV鞋店价值评估与供应链选择 - 2026年企业推荐榜
  • 基于ATtiny85的智能烙铁定时器:低成本安全卫士DIY指南
  • 别扔!用吃灰的TP-LINK-WR703N做个无线打印服务器,保姆级刷机教程(含Breed+OpenWrt)
  • 避坑指南:在Docker容器里为OpenCV编译Nvidia GPU硬解码支持,我踩过的那些‘库版本’的坑
  • CodeGraph:给 Claude Code/Codex 装上“代码地图“,Token 直降 35%
  • 2026柴油流量计技术解析与主流产品实测对比:沥青液位计/沥青液位计/液碱流量计/液碱流量计/液碱液位计/液碱液位计/选择指南 - 优质品牌商家
  • 2026年Q2硝酸液位计靠谱品牌排行及实测对比:液碱液位计、液碱液位计、煤气流量计、煤气流量计、电磁流量计、电磁流量计选择指南 - 优质品牌商家
  • GCBasic驱动Arduino LCD扩展板:从引脚映射到传感器集成
  • DIY无线电控制闹钟:自动对时、自适应亮度与家庭自动化集成
  • Ubuntu 20.04 终端焕新:从Bash到Zsh与oh-my-zsh的平滑迁移与高效配置
  • 深度学习在MRI肌肉分割中的应用与优化
  • 2026年江苏区域静电检测闸机专业厂家TOP5排行:上海翼闸速通门/上海通道闸门禁/上海防静电门禁闸机/上海防静电闸机/选择指南 - 优质品牌商家
  • 三路音调控制电路设计:基于Baxandall架构的独立中频调节方案
  • 别再死记硬背了!用VHDL和原理图两种方式,手把手带你吃透一位全加器的设计逻辑
  • 提升会计新人个人能力的核心方法
  • 解决Si4732收音机SSB模式触摸干扰:从3.4GHz泄漏到硬件改造
  • 网易云音乐NCM转MP3终极指南:ncmdump工具完整使用教程
  • Jetson Nano新手避坑指南:从选对HDMI转接头到搞定aarch64架构软件安装
  • 2026年硝酸液位计TOP5实测排行:柴油流量计/柴油流量计/氨水液位计/氨水液位计/氯气流量计/氯气流量计/沥青液位计/选择指南 - 优质品牌商家
  • 基于Sallen-Key拓扑的四阶有源低通滤波器设计与音频抗混叠应用
  • android主流闹钟流程/架构-------------不用改架构
  • DIY磁环天线改造:从“甜甜圈”到高性能“复活节彩蛋”天线
  • Redis沙盒体验:在浏览器中零门槛掌握NoSQL核心技能
  • 从零打造ESP32-WROVER开发板:硬件设计、焊接调试与PSRAM应用全解析
  • Activiti7工作流实战:手把手教你实现审批驳回与打回功能(附完整代码)
  • 软阴影:那个让虚拟世界“温柔起来“的光影小秘密