leetcode-581. 最短无序连续子数组-找到第一次出现的局部降序,局部升序
581. 最短无序连续子数组
class Solution {
public int findUnsortedSubarray(int[] nums) {
int res = 0;
if(nums.length == 1 ){
return res;
}
int length = nums.length;
int begin = 0;
int end = -1; //因为如果end<=begin应该是0,初始化为0那就成1了
//假设最小值为第一个数字,让max为最小值,遇到更大的会更新的
int max = nums[0];
//假设最大值为最后一个数字,让min为最大值,遇到更小会更新的
int min = nums[length - 1];
for(int i = 0; i < nums.length; i++){
if(nums[i] < max ){ //遇到一个比max小的,就发生了局部降序,记录此时的值为end,一直跟新end,直到最后一次发生局部降序位置
end = i;
}else{ //遇到比max还大的就更新,就是说当前的数再跟前一个数比较,如果全部进入else以此保证部分升序
max = nums[i];
}
if(nums[length - 1 - i] > min){ //lengthen-1 - i就是从后向前遍历,假如找到了比min大的,发生了局部升序,记录为begin,一直更新begin,直到最后以此发生局部升序的位置,此处就是最终的end
begin = length - i - 1;
}else{
min = nums[length - 1 - i];
}
}
return end - begin + 1;
}
}