Leetcode581. 最短无序连续子数组(HOT100)
链接
我的代码:
class Solution {
public:int findUnsortedSubarray(vector<int>& nums) {vector<int> res = nums;sort(res.begin(),res.end());int l = 0,r = nums.size()-1;while(nums[l]==res[l]){++l;if(l==nums.size()){return 0;}}while(nums[r]==res[r]){--r;//这就就不用判断if(r==0)了,因为代码能走到这里说明我们从左到右遍历时遇到了不同的点}return r-l+1;}
};
//https://leetcode.cn/problems/shortest-unsorted-continuous-subarray/solutions/2846020/san-chong-jie-fa-duo-yu-yan-you-pei-tu-b-38a4
更好的代码:
class Solution {
public:int findUnsortedSubarray(vector<int>& nums) {int n = nums.size();int l = 0, r= n-1;while(l+1<n&&nums[l+1]>=nums[l])++l;if(l==n-1)return 0;while(r-1>=0&&nums[r-1]<=nums[r])--r;for(int i = l+1;i<n;i++){while(l>=0&&nums[l]>nums[i])--l;}for(int i = r-1;i>=0;i--){while(r<n&&nums[r]<nums[i])++r;}return r-l-1;}
};
题解:第一种方法很好理解,我们的目标是让整个数组非递减排序。那么我们就拷贝一下原数组,排个序让我们直观地看到最终结果。
然后挨着比较对应位置元素是否相等,不相等说明:这个元素在变成最终结果时需要移动,于是我们用l 记录下来,当然了,每次l++后判断是否到头了。
从右往左也是类似,如果不相等,说明对应元素最终也是需要挪动的。
第二种方法较难:
我们从左到右找到非递减的右端点l,以及对应的r。
此时l~r之间的元素都是需要排序的,但是仅仅只是它们之间的元素吗?不是!l~r之间的元素可能有整个数组的最小值,那么按照惯例,它在排序后的数组中是要处于0号位置的。所以我们从l+1往右开始轮询,找到l左侧的子数组中,小于等于右侧子数组的最小值的最大值。从那个位置起(不包括它),可以把右侧最小元素搁置下。
同理,l~r之间存在整个数组最大值,这是要往右安置的,所有r指针需要往右移动,移动到某个位置------这个位置要能容纳地下这个比较大的元素。
和l r指针比较时,我们是仅仅需要找出l~r之间的最值元素呢?还是整个数组的?当然是整个数组的:

不难发现,l左侧这些元素可能大于r刚刚遍历走过的元素,如果要将整个数组排序,那么l左侧这些元素应该都要挪动。
所以:遍历时,应该让l--;然后新的指针从l+1开始,一直走到数组最右侧;
同理,r++;然后新的指针从r-1开始,一直走到0位置。
最终返回值也值得一说:
我们最后两个for循环中的while循环:都是先--或者++之后再判断的,所以它们从while循环出来时,l r指向的都是与左侧或者右侧最值相等的值,相等的值不需要加入到答案中,比如13543,这五个元素,你要把3543重新排序结果是正确的,但是题目中要求最短,所以543才是最终答案。
相关文章:
Leetcode581. 最短无序连续子数组(HOT100)
链接 我的代码: class Solution { public:int findUnsortedSubarray(vector<int>& nums) {vector<int> res nums;sort(res.begin(),res.end());int l 0,r nums.size()-1;while(nums[l]res[l]){l;if(lnums.size()){return 0;}}while(nums[r]res…...
HTML前端开发-- Flex布局详解及实战
引言 Flex布局,全称为Flexible Box Layout,是一种现代CSS布局技术,它提供了一种更有效的方式来设计响应式布局和复杂页面布局。本文将详细介绍Flex布局的基本概念、属性以及实战应用。 一、基本概念 Flex布局的核心是Flex容器(…...
基于JWT跨语言开发分布式业务系统的挑战与实践:多语言协作的最佳方案
在现代分布式架构下,开发团队往往由来自不同技术栈和开发语言的工程师组成。如何有效地管理这些开发人员的协作,尤其是在实现跨语言的认证与授权机制时,成为了开发者面临的一个重大挑战。JSON Web Token(JWT)作为一种轻…...
二分法篇——于上下边界的扭转压缩间,窥见正解辉映之光(2)
前言 上篇介绍了二分法的相关原理并结合具体题目进行讲解运用,本篇将加大难度,进一步强化对二分法的掌握。 一. 寻找峰值 1.1 题目链接:https://leetcode.cn/problems/find-peak-element/description/ 1.2 题目分析: 题目要求返回数组内…...
什么是 Kata Containers?
什么是 Kata Containers? Kata Containers 是一种结合了容器技术和虚拟机技术的轻量级运行时,旨在提供容器的速度和虚拟机的安全性。它将容器运行在一个隔离的虚拟机中,从而大幅提升安全性,同时保持容器的高效性。 Kata Contain…...
SpringMvc项目配置RabbitMq
前言:只有消费者部分,没有记录生产者部分 结构图 配置类 可以xml配置,也可以配置类,二者可以相互转化。两种bean注入的方式。 import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.spring…...
shell编程(4)脚本与用户交互以及if条件判断
shell编程(4)脚本与用户交互以及if条件判断 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,…...
vue2组件跨层级数据共享provide 和 inject
在 Vue 2 中,provide 和 inject 的功能也是可以使用的,虽然在 Vue 3 中它们成为了组合式 API 的一部分。在 Vue 2 中,provide 和 inject 主要是用于祖先组件和后代组件之间的数据共享,而不是通过 props 和 emit 逐层传递。 Vue 2…...
springboot/ssm校园闲置物品交易系统ava大学生二手闲置交易平台web二手源码
springboot/ssm校园闲置物品交易系统ava大学生二手闲置交易平台web二手源码 基于springboot(可改ssm)htmlvue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数…...
Redis实现限量优惠券的秒杀
核心:避免超卖问题,保证一人一单 业务逻辑 代码步骤分析 全部代码 Service public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {Resourceprivate ISeckillVoucher…...
Linux centOS 7 安装 rabbitMQ
1.安装前需要了解,rabbitmq安装需要先安装erlang,特别注意的是erlang与rabbitmq的版本之间需要匹配。 el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm - rabbitmq/rabbitmq-server packagecloud 3.10版本的rabbitmq 对于erlang的版本要求可以看此连接…...
活着就好20241202
亲爱的朋友们,大家早上好!今天是2024年12月2日,第49周的第一天,也是十二月的第二天,农历甲辰[龙]年十月三十。在这个全新月份的开始、阳光初升的清晨,愿第一缕阳光悄悄探进你的房间,带给你满满的…...
自由学习记录(28)
C# 中的流(Stream) 流(Stream)是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的,提供了多种具体实现,每种实现都针对…...
操作系统、虚拟化技术与云原生01
操作系统基础 操作系统定义 OS声明了软件怎么调用硬件,同时支持人机交互 人机交互的过程: shell是人机交互转换的虚拟环境,内核只能识别0、1组成的数据流,底层资源只能识别电流的变化 操作系统的组成 1. 进程管理 进程定义&#x…...
linux的挂卸载
挂卸载操作 在 Linux 系统中,挂载(mount)和卸载(umount)是管理文件系统和存储设备的核心操作。通过这两个操作,我们可以将设备(如硬盘、光盘、U盘等)或网络文件系统的内容集成到系统…...
【和春笋一起学C++】OpenCV中数组和指针运用实例
前言:前面学习了数组和指针在C中的处理原理,本文通过自己编写一个图像处理的函数实例来加深对数组和指针的理解。为什么是图像处理呢,因为图像数据是一个二维矩阵,相当于一个二维数组,前面学习了一维数组,现…...
Maya 中创建游戏角色的头发,并将其导出到 Unreal Engine 5
这段视频教程讲解了如何在 Maya 中创建游戏角色的头发,并将其导出到 Unreal Engine 5 中,重点是如何处理头发的物理模拟和材质。 作者 Andrew Giovannini 首先展示了一个已完成的带物理模拟的头发模型,并介绍了他自己的游戏行业背景。然后&a…...
React 路由(React Router):在 React 应用中管理路由
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
SAP-CPI组件Transformation介绍之Converter
1.配置CSV to XML Converter Field Description XML Schema 选择Select按钮,选择合适 XSD 文件. 或者可以选择 Upload from File System 系统中查找合适的XML文件....
Laravel 代理收益排行榜
创建了一个收入表 CREATE TABLE income_logs (id int(11) unsigned NOT NULL AUTO_INCREMENT,order_id int(11) NOT NULL COMMENT 订单ID,type int(11) NOT NULL DEFAULT 0 COMMENT 类型 0 支出 1收入,user_id int(11) NOT NULL COMMENT 消费者用户,price decimal(10,2) NOT…...
昇腾CANN的算子“零件厂“:catlass仓库到底在生产什么
如果把昇腾NPU上的大模型算子比作一辆汽车,FlashAttention是发动机,RMSNorm是刹车片,RoPE是方向盘——那catlass是什么?是生产这些零件的模具和机床。 第一次接触昇腾CANN生态的时候,很容易忽略catlass。它不像ops-tr…...
Taotoken多模型路由在单一服务故障时的体验保障
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken多模型路由在单一服务故障时的体验保障 1. 引言 在构建依赖大模型能力的应用时,服务的稳定性是开发者必须面对…...
洛雪音乐音源终极配置指南:三步解决音乐播放难题
洛雪音乐音源终极配置指南:三步解决音乐播放难题 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否经常遇到音乐播放器找不到想听的歌曲?是否厌倦了在各个平台间切换只…...
VMP保护机制原理与合法调试实践指南
我不能按照您的要求生成涉及软件破解、逆向工程、绕过版权保护或破坏加密机制相关内容的博文。原因如下:法律合规性:VMP(VMProtect)是一种商用软件保护工具,其核心目标是防止未经授权的逆向分析、代码盗用与二次分发。…...
告别龟速下载!trackerslist项目让你的BT下载速度飙升300%的终极指南
告别龟速下载!trackerslist项目让你的BT下载速度飙升300%的终极指南 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 你是否曾经面对BT下载时进度条几乎不动而感…...
终极指南:5分钟搭建Rust高性能HTTP文件服务器,告别繁琐配置
终极指南:5分钟搭建Rust高性能HTTP文件服务器,告别繁琐配置 【免费下载链接】simple-http-server Simple http server in Rust (Windows/Mac/Linux) 项目地址: https://gitcode.com/gh_mirrors/si/simple-http-server Simple HTTP Server是一款基…...
Taotoken的模型广场如何辅助开发者进行技术选型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken的模型广场如何辅助开发者进行技术选型 对于需要集成大模型能力的开发者而言,面对市场上众多的模型提供商、复…...
JMeter压测秒退的三大静默杀手:线程组、超时、监听器
1. 这不是JMeter“崩了”,而是它在用报错告诉你:配置里藏着三个沉默的杀手 刚跑完第一个JMeter压测脚本,线程组设了200个用户、持续5分钟,结果3秒后就自动停了——控制台只留下一行灰底白字的 INFO o.a.j.e.StandardJMeterEngine…...
别再乱关防火墙了!ESXi 7.0/8.0 安全开放自定义端口的保姆级教程(附配置文件详解)
ESXi防火墙精细化管控:安全开放自定义端口的工程实践 在虚拟化环境中,ESXi主机作为承载业务系统的核心基础设施,其网络安全防护的重要性不言而喻。许多管理员在面对需要开放非标准端口的场景时,往往陷入两难:要么粗暴关…...
别再死记硬背了!用STM32CubeMX配置GPIO模式,这3个坑我帮你踩过了
STM32CubeMX实战:GPIO配置避坑指南与典型场景解析 刚接触STM32开发的工程师们,面对CubeMX中眼花缭乱的GPIO配置选项时,是否常感到困惑?推挽与开漏输出如何选择?上拉和下拉电阻何时需要?本文将结合LED驱动、…...
