leetcode 581. Shortest Unsorted Continuous Subarray(最短未排序子数组)

在WPS/Office中免费使用AI,快速提升办公效率!​ 《免费解锁WPS/Office AI办公神器教程》摘要: 本教程详解如何通过第三方插件OfficeAI免费实现WPS/Office智能办公,突破官方付费限制。从安全设置到安装配置,手把手教学,涵盖文档生成、PPT美化、Excel图表等核心功能。关键优势包括零成本、全场景支持及云端/本地双模式切换,并附常见问题解决方案。注意需使用WPS 2024+版本,安装时需临时关闭杀毒软件。教程强调工具来源合法性,建议商用购买正版授权。(149字) 阅读详情

Given an integer array nums, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order.

Return the shortest such subarray and output its length.

Example 1:

Input: nums = [2,6,4,8,10,9,15]
Output: 5
Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.

简言之就是找出大的排序数组中未排序的部分的长度

思路:
(1) 可以另外建一个数组,保存与nums一样的元素,但是排序。
然后一一对比,从左边遍历,发现顺序不对的index保存到start,再从右边遍历,遇到顺序不一致的index保存为end,最后未排序部分的长度为end-start+1

    public int findUnsortedSubarray(int[] nums) {
        if(nums == null || nums.length == 0) {
            return 0;
        }
        
        int n = nums.length;
        int[] tmp = nums.clone();
        Arrays.sort(tmp);
        
        int start = -1;
        int end = -2;
        
        for(int i = 0; i < n; i++) {
            if(tmp[i] != nums[i]) {
                start = i;
                break;
            }
        }
        
        for(int i = n -1; i >= 0; i--) {
            if(tmp[i] != nums[i]) {
                end = i;
                break;
            }
        }
        
        return end-start+1;
    }

(2) 简化上面的方法,从左到右应是升序的,从右到左应是降序的。
比如数组 1,2,3,XXX,9,10,11
我们知道中间这XXX的部分是需要重新排序的,才能整体升序,

所以这XXX部分的最小值unsortedMin也要比左边最右边的3大,
XXX部分的最大值unsortedMax也会比最右边的最小值9小。

然而也可以知道这个unsortedMin肯定不在最左边,不然就是正常的升序了,XXX就不从它开始了,
同理unsortedMax也不在最右边,不然XXX就不包含它了是吧。

所以,XXX部分的左边界数字应该是从右到左最后一个比unsortedMin大的数字(再往左所有数字都会比它小),
而XXX部分的右边界一定是从左到右最后一个比unsotedMax小的数字(再往右所有数字都比它大了)。

所以,从左到右,同时从右到左同时遍历数组,找出上面条件的边界即可。

注意start和end的初始化,在数组一直是正确顺序时,未排序部分的长度应该为0,即初始的end - start + 1应等于0.

    public int findUnsortedSubarray(int[] nums) {
        int n = nums.length;
        int unsortedMax = nums[0];
        int unsortedMin = nums[n-1];
        int start = -1;
        int end = -2;
        
        for(int i = 0; i < n; i++) {
            //从前往后找不排序部分的最大值
            unsortedMax = Math.max(unsortedMax, nums[i]);
            //从后往前找不排序部分的最小值
            unsortedMin = Math.min(unsortedMin, nums[n - 1 - i]);
            
            //更新最后一个比 不排序部分最大值 小的index
            //因为后面的排序部分都要比这部分的所有值大
            if(nums[i] < unsortedMax) {
                end = i;
            }
            //更新最前面一个比 不排序部分最小值 大的index
            //因为前面排序的部分必是比这部分的所有值都小的
            if(nums[n - 1 - i] > unsortedMin) {
                start = n - 1 - i;
            }
        }
        
        return (end - start + 1);
    }
作为专家系统与应用的审稿人:提醒你投稿注意事项 本文为《专家系统与应用》(ESWA)期刊投稿指南,重点强调研究方向匹配性、学术质量和写作规范。要求论文以智能系统/算法为核心,突出增量创新并具可验证性,需包含严谨方法论和充分实验验证。写作需结构清晰,符合期刊格式要求,包括明确的研究问题、分类文献综述、详细技术实现和量化结果。投稿前需仔细核对期刊指南,引用相关文献,并妥善处理审稿意见。ESWA注重创新实质性和应用落地价值,建议突出智能系统设计核心,避免成为单纯技术应用描述。 阅读详情

相关推荐

数据库:关系运算整理大全(包括关系代数、元组关系演算、域关系演算)

数据库关系运算: 1. 关系代数(基本关系代数、附加关系代数、扩展关系代数) 2. 元组关系演算 3. 域关系演算

ysji's blog 1万+

LeetCode-581:Shortest Unsorted Continuous Subarray (最短未排序连续子数组) -- easy

给定整数数组,找到一个最短的连续的未按照升序排序的最短子数组,返回子数组的长度

大树先生的博客 2753

神州数码防火墙(DCN)NAT SSL-VPN配置

SSL-VPN是基于应用层的VPN,采用SSL协议来实现远程接入的一种新型VPN技术,比L2TP更加灵活的VPN方案。是天然的安全远程接入方案。用户可以通过浏览器的HTTPSs登录VPN的网址。SSL-VPN的认证方式包括LDAP,radius,CA,USB Key等方式。 SSL VPN的主要应用场景是保证远程用户能够在企业外部安全\高效的访问企业内部的网络资源

qq_50966485的博客 4554

leetcode 581. SHortest Unsorted Continuous Subarray

题目概述 解题思路 这道题首先提示我们:有O(n)时间复杂度的解法。也就是说,只需要常数次地遍历数组即可。 观察这个数组,我们可以发现,关键在于找到第一个和最后一个需要调换位置的数的序号。这该怎么找呢? 观察发现:假设数组A前i个元素的最大值为,如果A[i+1] <,则该元素必定要调换顺序;如果A[i+1] ==,则要根据之后的结果判断。同样假设数组A后j个元素的最小值为,如果A[j-1] >,则该元素必定要调换顺序;如果A[j-1] ==,则要根据之前的结果判断。这样我们先...

georgeandgeorge的博客 146

从原始数据到农学模型:DJI M3M/P4M多光谱影像全链路处理实战

本文详细介绍了使用DJI M3M/P4M多光谱无人机进行农学建模的全链路流程。核心在于强调辐射标定的首要性,它将原始DN值转换为具有物理意义的反射率,是确保后续植被指数计算与模型反演准确性的基石。文章通过大疆智图和Pix4Dfields的实战演示,手把手指导完成数据处理、影像镶嵌及光谱信息提取,最终构建从光谱指数到叶面积指数等关键农学参数的反演模型,实现精准农业分析。

weixin_29281941的博客 243

ArcGIS高效拆分shp文件:无需依赖属性表的实用技巧

本文针对ArcGIS中shp文件因属性表缺失而难以拆分的问题,详细介绍了无需依赖属性表的实用技巧。核心是使用“拆分多部件要素”工具,直接根据图形结构将多个独立但被合并的部件拆分为单个要素,并提供了ArcGIS Pro和ArcMap的操作流程、关键注意事项及拆分后的属性处理方案。

n2o3p4的博客 376

LeetCode 581. Shortest Unsorted Continuous Subarray (最短的未排序连续子阵列)

原题 Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to fin...

Dby_freedom的博客 302

LatentSync:开源数字人唇形同步技术的实战部署与优化指南

本文详细介绍了开源数字人唇形同步工具LatentSync的实战部署与优化全流程。从核心原理(潜在扩散模型与TREPA技术)解析,到手把手完成环境搭建、模型获取及首次推理。文章深入探讨了自定义素材处理、关键参数调优(如guidance_scale),并提供了显存不足、人脸检测失败等常见问题的解决方案与性能优化技巧,旨在帮助用户高效部署并提升生成效果。

9o8p7i6u5y的博客 1004

LeetCode581. Shortest Unsorted Continuous Subarray(最短无序连续子数组)

最短无序连续子数组

grllery的博客 480

3D打印机控制系统设计:基于MATLAB的3D打印机运动学建模、轨迹规划和控制

控制实现:在控制实现中,需要将轨迹规划的结果转化为实际的控制指令,控制3D打印机按照规划的轨迹进行运动。3D打印机的运动学建模:3D打印机的运动学建模是指将3D打印机的机械结构、传动系统和运动控制部件等抽象成数学模型,以便于进行控制系统的设计和分析。轨迹规划:轨迹规划是指根据3D模型的几何形状和打印机的运动学模型,计算出打印机需要执行的运动轨迹,以便于实现所需的打印效果。控制实现:控制实现是指将轨迹规划的结果转化为控制指令,控制3D打印机按照规划的轨迹进行运动。

走向CTO的路上... 2473

Debezium系列之:深入理解 Debezium Topic的设置要求

Debezium系列之:配置 Debezium Topic

zhengzaifeidelushang的博客 1009

581. Shortest Unsorted Continuous Subarray​​​​​​​

581. Shortest Unsorted Continuous Subarray  思路:逐个找出nums[i]&gt;nums[i+1]的点,使用两个变量记录子数组开始和结束的位置,在更新位置时应该一直向前比较,并判断是否达到边界。另外需要注意的点是对于相等的数如何比较,可以分为两种情况,一种是在这个相等数的前面是排好序的,另一种是未排好序的。目前的解决办法是假设是为排序好的,在得到数组的...

anhuibozhoushatu的专栏 160

2024 全国大学生新质生产力大赛 B:金融违规交易的大数据分析 问题四思路代码

问题四:请分析附件中所有的指标数据,选取合适的指标,建立“金融违规 洗钱交易的预测模型”,并选取合适的训练集和测试集,计算预测模型的准确率。 为了提前识别并预测金融违规洗钱的交易事件,请基于你们团队数据分析的结果, 分别给公安部门和银行机构提出你们的建议。

YOLO 375

LeetCode //C - 581. Shortest Unsorted Continuous Subarray

【代码】LeetCode //C - 581. Shortest Unsorted Continuous Subarray。

Made in Code 1317

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

581. Shortest Unsorted Continuous Subarray

581. Shortest Unsorted Continuous Subarray方法0: sort方法1: monotonic stack Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then th...

wilzxu的博客 252

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Leetcode 581.最短无序连续子数组(Shortest Unsorted Continuous Subarray)

Leetcode 581.最短无序连续子数组 1 题目描述(Leetcode题目链接)   给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。   你找到的子数组应是最短的,请输出它的长度。 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变...

qq_39378221的博客 209

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 你找到的子数组应是最短的,请输出它的长度。 LeetCode581. Shortest Unsorted Continuous Subarray 示例 1: 输入: ...

weixin_30868855的博客 193

LeetCode(581):最短无序连续子数组 Shortest Unsorted Continuous Subarray(Java)

2019.10.27 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) github:https://github.com/ChopinXBP/LeetCode-Babel 这道题根本的思路是要找到无序子数组的左边界和右边界,有三种方法: 1.排序 对原数组进行排序,将排序后的数组与原数组进行比较,找出最左和最右开始不对应的结点。可以从首尾进行顺序遍历,也可以用二分搜索。 ...

NJU_ChopinXBP的博客 336

LeetCode-581. Shortest Unsorted Continuous Subarray (JAVA)最短未排序数组

LeetCode-581. Shortest Unsorted Continuous Subarray (JAVA)最短未排序数组

mine_song的博客 1853

【LeetCode】581. Shortest Unsorted Continuous Subarray

Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to find ...

韩旭051的博客 595

581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)题解两次遍历复杂度分析PythonJava(待完成)排序比对复杂度分析PythonJava(待完成) 题解 两次遍历 第一次简历: 从前向后遍历,使用max_nummax\_nummax_num,保存到当前位置为止的最大值,若下个数大于等于max_nummax\_nummax_num,则更新m...

朱师傅的博客 215

581. Shortest Unsorted Continuous Subarray*

581. Shortest Unsorted Continuous Subarray* https://leetcode.com/problems/shortest-unsorted-continuous-subarray/ 题目描述 Given an integer array, you need to find one continuous subarray that if you only ...

珍妮的选择的博客 255

[LeetCode]581. Shortest Unsorted Continuous Subarray

https://leetcode.com/problems/shortest-unsorted-continuous-subarray/#/description 找到最短连续子数组,将这个子数组排序之后整个数组就有序了。求最短子数组长度 从左往右遍历的话,如果有序的话当前位置一定是已经遍历到的最大值位置;从右往左遍历的话,当前位置一定是已经遍历到的最小值位置。如果不是就要

gqk289的专栏 2280

【LeetCode 581】Shortest Unsorted Continuous Subarray

题目描述 Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to f...

iCode_girl的博客 184

LeetCode 581 Shortest Unsorted Continuous Subarray 题解

LeetCode 581 Shortest Unsorted Continuous Subarray 题解 题意 给定一个数组,找出一个最短的子序列使其满足,只将这个子序列重新排序即可使整个数组有序(升序)。输出这个最短子序列的长度。 思路 一 排序对比 比较容易想到的是将数组排序后与原数组对比。比如样例: 未排序 [2, 6, 4, 8, 10, 9, 15] 排序后 [2, 4, 6, 8, ...

EricJeffrey的博客 184

leetcode581——Shortest Unsorted Continuous Subarray

题目大意:找出最短的子数组,子数组排序后能让整个数组升序(非降序) 分析:方法一:排序后比较,第一个和最后一个值不相等的位置就是子数组的左右界限。时间O(nlogn),空间O(n)。 方法二:题意=>找到乱序子数组的左右界限=>遍历一次找到逆序子数组的最小值(它的正确位置代表子数组的左界限)和最大值(它的正确位置代表子数组的右界限)=>找到两个最值之后,从左往右找最小值本该放...

tzyshiwolaogongya的博客 227
上一篇: leetcode 566. Reshape the Matrix (矩阵的reshape)
下一篇: leetcode 605. Can Place Flowers(能否种花)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值