Leetcode 581. 最短无序连续子数组 中等 数组
581. 最短无序连续子数组
题目:
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
示例 1:
输入:nums = [2,6,4,8,10,9,15]
输出:5
解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
思路:
求中间乱序的连续子数组长度。对于子数组排序后,整个数组就为有序数组。
也就是分为A、B、C三段,A为有序数组,C为有序数组,B为无序。
那么A中的num<=B C
C中的元素均大于B
所以我们从左到右,记录最大值,当最大值<num[i]时,记录B的右边界为i
从右到左,记录最小值,当最小值>num[n-i-1]时,记录B的左边界为n-i-1
class Solution { public: int findUnsortedSubarray(vector<int>& nums) { int maxn=INT_MIN; int minn=INT_MAX; int right=-1; int left=-1; int n=nums.size(); for(int i=0;i<nums.size();++i){ // 从左向右,逐个遍历 // 如果之前的最大值大于当前值,做标记i为B段的右端点 // 否则,更新最大值 if(maxn>nums[i]){ right=i; }else{ maxn=nums[i]; } // 从右向左 // 如果B段的最小值小于当前值,标记n-i-1为B段的左端点 // 否则,更新最小值 if(minn<nums[n-i-1]){ left=n-i-1; }else{ minn=nums[n-i-1]; } } return right==-1?0:(right-left+1); } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了