算法题 最大宽度坡

最大宽度坡

问题描述

给定一个整数数组nums,定义一个为元组(i, j),其中i < jnums[i] <= nums[j]。坡的宽度j - i

请返回数组中最大宽度坡的宽度。如果没有坡,返回 0。

示例

输入: [6,0,8,2,1,5] 输出: 4 解释: 最大宽度坡为 (1, 5): nums[1] = 0 <= nums[5] = 5,宽度 = 5 - 1 = 4 输入: [9,8,1,0,1,9,4,0,4,1] 输出: 7 解释: 最大宽度坡为 (2, 9): nums[2] = 1 <= nums[9] = 1,宽度 = 9 - 2 = 7

算法思路

方法一:暴力

对每个可能的左端点i,遍历所有右端点j > i,检查是否满足nums[i] <= nums[j],并记录最大宽度。

时间复杂度:O(n²),对于 n=50000 会超时。

方法二:单调栈 + 二分搜索

  1. 构建候选左端点:使用单调递减栈存储可能作为左端点的索引

    • 只有当nums[i]小于栈顶元素对应的值时,才将i入栈
    • 保证了栈中索引对应的值是严格递减的
  2. 从右向左寻找右端点:从数组末尾开始遍历,对每个位置j

    • 在单调栈中找到最左边的索引i,使得nums[i] <= nums[j]
    • 由于栈中值是递减的,可以使用二分搜索快速定位

代码实现

方法一:暴力

classSolution{/** * 暴力:检查所有可能的坡 * * @param nums 输入数组 * @return 最大宽度坡的宽度 */publicintmaxWidthRamp(int[]nums){intmaxRamp=0;intn=nums.length;for(inti=0;i<n;i++){for(intj=i+1;j<n;j++){if(nums[i]<=nums[j]){maxRamp=Math.max(maxRamp,j-i);}}}returnmaxRamp;}}

方法二:单调栈 + 二分搜索

importjava.util.*;classSolution{/** * 使用单调栈和二分搜索求解最大宽度坡 * * @param nums 输入数组 * @return 最大宽度坡的宽度 */publicintmaxWidthRamp(int[]nums){intn=nums.length;Stack<Integer>stack=newStack<>();// 构建单调递减栈,存储候选左端点的索引// 栈中索引对应的值是严格递减的for(inti=0;i<n;i++){// 只有当当前元素小于栈顶元素对应的值时才入栈if(stack.isEmpty()||nums[i]<nums[stack.peek()]){stack.push(i);}}intmaxRamp=0;// 从右向左遍历,寻找最佳右端点for(intj=n-1;j>=0;j--){// 在单调栈中找到最左边的索引i,使得nums[i] <= nums[j]// 由于栈中值递减,可以弹出所有满足条件的栈顶元素while(!stack.isEmpty()&&nums[stack.peek()]<=nums[j]){inti=stack.pop();maxRamp=Math.max(maxRamp,j-i);}}returnmaxRamp;}}

算法分析

方法一:暴力

  • 时间复杂度:O(n²)
  • 空间复杂度:O(1)

方法二:单调栈 + 二分搜索

  • 时间复杂度:O(n)
    • 构建单调栈:O(n)
    • 从右向左遍历:O(n)
    • 每个元素最多入栈和出栈一次
  • 空间复杂度:O(n)
    • 单调栈最多存储 n 个元素

算法过程

输入[9,8,1,0,1,9,4,0,4,1]

1:构建单调递减栈

  • i=0: stack=[0] (值9)
  • i=1: 8<9, stack=[0,1] (值9,8)
  • i=2: 1<8, stack=[0,1,2] (值9,8,1)
  • i=3: 0<1, stack=[0,1,2,3] (值9,8,1,0)
  • i=4: 1>0, 跳过
  • i=5: 9>0, 跳过
  • i=6: 4>0, 跳过
  • i=7: 0==0, 跳过
  • i=8: 4>0, 跳过
  • i=9: 1>0, 跳过

最终栈:[0,1,2,3] 对应值 [9,8,1,0]

2:从右向左遍历找最大坡

  • j=9, nums[9]=1:
    • 比较栈顶 nums[3]=0 ≤ 1 , 宽度=9-3=6, maxRamp=6
    • 比较栈顶 nums[2]=1 ≤ 1 , 宽度=9-2=7, maxRamp=7
    • 比较栈顶 nums[1]=8 > 1 , 停止
  • j=8, nums[8]=4:
    • 比较栈顶 nums[1]=8 > 4 , 跳过
  • j=7, nums[7]=0:
    • 比较栈顶 nums[1]=8 > 0 , 跳过
  • j=6, nums[6]=4:
    • 比较栈顶 nums[1]=8 > 4 , 跳过
  • j=5, nums[5]=9:
    • 比较栈顶 nums[1]=8 ≤ 9 , 宽度=5-1=4, maxRamp=7
    • 比较栈顶 nums[0]=9 ≤ 9 , 宽度=5-0=5, maxRamp=7
    • 栈空,停止

最终结果:7

测试用例

publicclassTestMaxWidthRamp{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();// 测试用例1:基本示例int[]nums1={6,0,8,2,1,5};System.out.println("Test 1: "+solution.maxWidthRamp(nums1));// 4// 测试用例2:复杂示例int[]nums2={9,8,1,0,1,9,4,0,4,1};System.out.println("Test 2: "+solution.maxWidthRamp(nums2));// 7// 测试用例3:严格递减数组(无坡)int[]nums3={9,8,7,6,5,4,3,2,1,0};System.out.println("Test 3: "+solution.maxWidthRamp(nums3));// 0// 测试用例4:严格递增数组int[]nums4={0,1,2,3,4,5,6,7,8,9};System.out.println("Test 4: "+solution.maxWidthRamp(nums4));// 9// 测试用例5:所有元素相同int[]nums5={5,5,5,5,5};System.out.println("Test 5: "+solution.maxWidthRamp(nums5));// 4// 测试用例6:单元素int[]nums6={1};System.out.println("Test 6: "+solution.maxWidthRamp(nums6));// 0// 测试用例7:两元素递增int[]nums7={1,2};System.out.println("Test 7: "+solution.maxWidthRamp(nums7));// 1// 测试用例8:两元素递减int[]nums8={2,1};System.out.println("Test 8: "+solution.maxWidthRamp(nums8));// 0}}

关键点

  1. 单调栈

    • 过滤掉"无用"的左端点
    • 保证栈中候选左端点的值严格递减
    • 使得后续查找更高效
  2. 为什么从右向左遍历

    • 对于固定的左端点,希望右端点尽可能靠右
    • 从右向左遍历可以确保找到每个左端点对应的最佳右端点
  3. 边界情况处理

    • 严格递减数组:返回0
    • 严格递增数组:返回n-1
    • 所有元素相同:返回n-1

常见问题

  1. 为什么单调栈要维护递减序列?

    • 如果存在i1 < i2nums[i1] <= nums[i2],那么i2永远不会成为最优左端点
    • i1位置更靠左,值更小或相等,对于任何右端点j,如果(i2,j)是坡,那么(i1,j)也是坡且宽度更大
  2. 能否从左向右遍历找右端点?

    • 效率较低
    • 从右向左遍历可以利用贪心思想:一旦找到满足条件的左端点,就可以立即计算宽度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unet image Face Fusion跨域问题解决?CORS配置正确姿势

unet image Face Fusion跨域问题解决&#xff1f;CORS配置正确姿势 1. 背景与问题引入 在部署基于 unet image Face Fusion 的人脸融合 WebUI 应用时&#xff0c;很多开发者会遇到一个看似简单却极具迷惑性的问题&#xff1a;前端页面能正常加载&#xff0c;但图片上传或融合…

江苏硕晟LIMS pro3.0:引领实验室信息管理新高度

公司介绍&#xff1a;专业铸就行业标杆江苏硕晟科学器材有限公司成立于2018年&#xff0c;是一家专注于实验室数字化转型的科技型中小企业。公司以"软件 硬件 服务 咨询"为核心业务模式&#xff0c;为各行业实验室提供一站式信息化解决方案。凭借在实验室信息管理…

Java Web mvc高校办公室行政事务管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着高校规模的不断扩大和行政事务的日益复杂&#xff0c;传统的人工管理模式已难以满足高效、精准的管理需求。高校办公室行政事务管理系统旨在通…

Qwen3-Embedding-0.6B与text-embedding-ada-002对比评测

Qwen3-Embedding-0.6B与text-embedding-ada-002对比评测 1. Qwen3-Embedding-0.6B 模型解析 1.1 核心能力与技术背景 Qwen3 Embedding 模型系列是 Qwen 家族中专为文本嵌入和排序任务打造的最新成员&#xff0c;基于强大的 Qwen3 系列密集基础模型构建。该系列覆盖了从轻量级…

用Qwen3-0.6B做的第一个AI项目——新闻分类器上线

用Qwen3-0.6B做的第一个AI项目——新闻分类器上线 1. 项目背景与目标 最近在尝试把大模型真正用起来&#xff0c;而不是停留在“调API、跑demo”的阶段。于是决定动手做一个完整的AI小项目&#xff1a;基于Qwen3-0.6B搭建一个新闻自动分类系统&#xff0c;并把它部署上线&…

Z-Image-Turbo支持哪些格式?PNG转换技巧分享

Z-Image-Turbo支持哪些格式&#xff1f;PNG转换技巧分享 1. Z-Image-Turbo图像生成与输出格式详解 阿里通义Z-Image-Turbo WebUI图像快速生成模型&#xff0c;由社区开发者“科哥”基于DiffSynth Studio框架进行二次开发构建&#xff0c;是一款专注于高效、高质量AI图像生成的…

SpringBoot+Vue 在线问卷调查系统管理平台源码【适合毕设/课设/学习】Java+MySQL

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着信息化时代的快速发展&#xff0c;问卷调查作为一种高效的数据收集方式&#xff0c;在学术研究、市场调研和社会分析等领域发挥着重要作用。传…

fft npainting lama日志轮转配置:避免磁盘空间耗尽最佳实践

fft npainting lama日志轮转配置&#xff1a;避免磁盘空间耗尽最佳实践 1. 引言&#xff1a;为什么日志管理至关重要 你有没有遇到过这样的情况&#xff1a;系统运行得好好的&#xff0c;突然某天发现WebUI打不开了&#xff0c;SSH连不上&#xff0c;或者提示“磁盘已满”&am…

Qwen3-1.7B vs Phi-3-mini:端侧部署可行性对比评测

Qwen3-1.7B vs Phi-3-mini&#xff1a;端侧部署可行性对比评测 1. 模型背景与核心定位 1.1 Qwen3-1.7B&#xff1a;轻量级通义千问的端侧潜力 Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模…

Qwen3-1.7B跨境电商应用:多语言商品描述生成

Qwen3-1.7B跨境电商应用&#xff1a;多语言商品描述生成 1. Qwen3-1.7B 模型简介 Qwen3&#xff08;千问3&#xff09;是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列&#xff0c;涵盖6款密集模型和2款混合专家&#xff08;MoE&#xff09;架构模型&#…

Qwen-Image-2512-ComfyUI文旅宣传应用:景区海报自动生成系统

Qwen-Image-2512-ComfyUI文旅宣传应用&#xff1a;景区海报自动生成系统 1. 让景区宣传更高效&#xff1a;AI如何改变文旅内容创作 你有没有遇到过这样的情况&#xff1f;旅游旺季临近&#xff0c;宣传物料却还在等设计师加班出图&#xff1b;一个景区有十几个打卡点&#xf…

计算机毕业设计springboot大学生兼职信息管理系统 基于SpringBoot的高校学生兼职岗位智能撮合平台 面向校园的兼职资源一站式管理与匹配系统

计算机毕业设计springboot大学生兼职信息管理系统&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“副业刚需”成为大学生群体的关键词&#xff0c;信息分散、真假难辨、流程繁…

Arbess项目实战 - 基于GitHub实现Java项目构建并自动化Docker部署

Arbess 是一款国产开源免费的 CI/CD 工具&#xff0c;支持免费自动化部署&#xff0c;一键安装零配置。本文将详细介绍如何安装并使用ArbessGitHub实现Docker项目自动化构建部署 1、GitHub 配置 本章节将介绍如何创建GitHub个人访问令牌&#xff0c;提供给Arbess克隆源码。 …

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘catboost’ 问题

摘要 你在使用pip install安装catboost库&#xff0c;或运行Python代码时遇到ModuleNotFoundError: No module named catboost报错&#xff0c;该问题核心诱因是pip与Python环境错位&#xff08;安装路径不匹配&#xff0c;占40%&#xff09; 网络/源问题导致安装不完整&…

计算机毕业设计springboot大学生健康管理系统 基于SpringBoot的高校学生身心健康追踪与干预平台 校园健康云:面向大学生的智能健康档案与风险预警系统

计算机毕业设计springboot大学生健康管理系统&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。“脆皮大学生”不是梗&#xff0c;是警报。体测前夜突击锻炼、熬夜刷剧到三点、心理…

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘lightgbm’ 问题

摘要 你在使用pip install安装lightgbm库&#xff0c;或运行Python代码时遇到ModuleNotFoundError: No module named lightgbm报错&#xff0c;该问题核心诱因是pip与Python环境错位&#xff08;安装路径不匹配&#xff0c;占40%&#xff09; 网络/源问题导致安装不完整&…

GPT-OSS部署成本分析:vGPU资源使用优化建议

GPT-OSS部署成本分析&#xff1a;vGPU资源使用优化建议 在当前大模型广泛应用的背景下&#xff0c;GPT-OSS作为OpenAI最新开源的20B参数级别模型&#xff0c;凭借其强大的语言理解与生成能力&#xff0c;正被越来越多企业和开发者用于本地化部署。本文聚焦于gpt-oss-20b-WEBUI…

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘xgboost’ 问题

摘要 你在使用pip install安装xgboost库&#xff0c;或运行Python代码时遇到ModuleNotFoundError: No module named xgboost报错&#xff0c;该问题核心诱因是pip与Python环境错位&#xff08;安装路径不匹配&#xff0c;占40%&#xff09; 网络/源问题导致安装不完整&#x…

Python系列Bug修复|如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘cudf’ 问题

摘要 你在使用pip install安装cudf库&#xff0c;或运行Python代码时遇到ModuleNotFoundError: No module named cudf报错&#xff0c;该问题核心诱因是CUDA环境缺失/版本不匹配&#xff08;30%&#xff09; pip与Python环境错位&#xff08;25%&#xff09; 未配置NVIDIA专…

YOLO11云端部署指南,GPU加速轻松开启

YOLO11云端部署指南&#xff0c;GPU加速轻松开启 你是否还在为搭建YOLO系列模型的复杂环境而头疼&#xff1f;是否希望快速上手最新的YOLO11&#xff0c;直接进入训练和推理阶段&#xff1f;本文将带你一步步完成YOLO11在云端的一键式部署&#xff0c;利用预置镜像实现GPU加速…