题目描述(题目链接)
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
思路
- 最终的结果是升序的,我们先将原数组升序排序保存在一个新的数组中
- 新数组和旧数组进行比对,从左往右遍历,找到第一个不相等的,记录下标
- 从右往左遍历,找到第一个不相等的,记录下标
- 右边记录的下标如果大于左边记录的下标,说明存在无序子集,那么返回右边的下标-左边的下标+1;反之说明不存在,返回0
代码
class Solution {
public int findUnsortedSubarray(int[] nums) {
int[] snums=nums.clone();
Arrays.sort(snums);
int left=0;
int right=nums.length-1;
//左边
for(;left<nums.length;left++){
if(nums[left]!=snums[left]){
break;
}
}
//右边
for(;right>=0;right--){
if(nums[right]!=snums[right]){
break;
}
}
return right>left?(right-left+1):0;
}
}