classSolution{public int findUnsortedSubarray(int[] nums){
int l =-1;
int r =-1;
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;// O(n) : 找到最右边的最小的,找到最左边的最大的不合理的,二者之间就是需要重新排序的。/*
什么叫最右边最小的呢? 正常来说从左到右应该是依次变大的,但是如果遇到当前值比左边的最大值小的,说明这个值是有问题的。
一直往右找,找到有问题的区间的右边界。
左边最大的不合理的:正常左边是比右边小的。如果遇到左边比右边大,那就是不合理的。
*/for(int i=0;i<nums.length; i++){if(nums[i]>= max)//说明正常,右边的比当前左边的最大值还大。max表示当前左边的最大值
max = nums[i];else
r = i;// 否则不正常则记录左边不正常的边界。}for(int i=nums.length-1; i>=0; i--){if(nums[i]<= min)
min = nums[i];else l = i;}return l ==-1?0:r-l+1;}}