题目大意:点击打开链接
例如:index: 0 1 2 3 4 5 6
nums: [2,6,4,8,10,9,15]
temp: [2,4,6,8,9,10,15]
Output:5
思路:就是克隆一个nums记做temp,并排序。
然后从头开始比较nums和temp里相应对位置的每一个值,第一个出现不等的位置是要求subarray的start
同理,从尾部开始依次比较nums和temp里相应对位置的每一个值,第一个出现不等的位置是要求subarray的end
最后计算subarray的长度,就是end-start+1
注意:原来的nums就是一个有序数组,像[1,2,3,4],不走两个for循环,一直是end==start的情况,要考虑到这个情况
public class Solution {
public int findUnsortedSubarray(int[] nums) {
if(nums==null || nums.length==0){
return 0;
}
int[] temp=nums.clone();
Arrays.sort(temp);
int start=0;
int end=0;
for(int i=0;i<nums.length;i++){
if(nums[i]!=temp[i]){
start=i;
break;
}
}
for(int j=nums.length-1;j>0;j--){
if(nums[j]!=temp[j]){
end=j;
break;
}
}
return end==start?0:end-start+1;
}
}