题目
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
思路
从前遍历,设置max值并更新,找到第一个小于max值的数字就是左边界。
从后遍历,设置min值并更新,找到第一个大于min的值的数字就是右边界。
代码
public int findUnsortedSubarray(int[] nums) {
int len = nums.length-1;
int max = nums[0];
int min = nums[nums.length-1];
//初始值设置几都可以,是为了在原数组本就升序的情况下,符合return语句输出的结果。
int l = -1;
int r = 0;
/* for(int i = 0;i<nums.length;i++){
if(nums[i]<max){
l = i;
}else{
max = nums[i];
}
if(nums[len-i]>min){
r = len-i;
}
else{
min = nums[len-i];
}
}*/
for(int i = 0,j = len;i<nums.length&&j>=0;i++,j--){
if(nums[i]<max){
l = i;
}else{
max = nums[i];
}
if(nums[j]>min){
r = j;
}
else{
min = nums[j];
}
}
return l-r+1;
}