标签:nums leetcode581 max min 无序 len 最短 int 数组
题目描述
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
思路
整个数组可以分成三段,左段(升序),中段(无序),右段(升序)。
中段的最大值小于右段的所有值,中段的最小值大于左段的最大值。
从左往右遍历数组,维护最大值,最右侧的小于最大值的元素,就是无序数组的右边界。
从右往左遍历数组,维护最小值,最左侧大于最小值的元素,就是无序数组的左边界。
代码
int len = nums.length;
int end = -1;
int begin = 0;
int max = nums[0];
int min = nums[len-1];
for(int i = 0; i < len; i++){
max = Math.max(max,nums[i]);
min = Math.min(min,nums[len-i-1]);
if(nums[i] < max){
end = i;
}
if(nums[len-1-i] > min){
begin = len-1-i;
}
}
return end-begin+1;
以上。
标签:nums,leetcode581,max,min,无序,len,最短,int,数组 来源: https://blog.csdn.net/Yangliu0326/article/details/113753112
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。