解法1:排序+判断是否相同
class Solution {
public int findUnsortedSubarray(int[] nums) {
int[] temp=new int[nums.length];
for(int i=0;i<nums.length;++i){
temp[i]=nums[i];
}
Arrays.sort(temp);
int left=0,right=nums.length-1;
while(left<nums.length){
if(nums[left]==temp[left]){
++left;
}else{
break;
}
}
while(right>=0){
if(nums[right]==temp[right]){
--right;
}else{
break;
}
}
return right>left?right-left+1:0;
}
}
解法2:
性质理解+左右指针
大佬题解里面这个图不错
class Solution {
public int findUnsortedSubarray(int[] nums) {
//我就故意分开写,不把放在一个循环里
int maxn = nums[0], right = -1;
for (int i = 0; i < nums.length; i++) {
if (maxn > nums[i]) {
right = i;
} else {
maxn = nums[i];
}
}
//我就故意分开写,不把放在一个循环里
int minn = nums[nums.length-1], left = -1;
for (int i = 0; i < nums.length; i++) {
if (minn < nums[nums.length - i - 1]) {
left = nums.length - i - 1;
} else {
minn = nums[nums.length - i - 1];
}
}
return right == -1 ? 0 : right - left + 1;
}
}