题目描述:
示例 1:
示例 2:
示例 3:
题目分析:
- 需要找到最短的无序子数组
- 也就是找到最大的递增前缀数组和最大的递增后缀数组
- 注意,如果数组长度是1,或者数据原本就是升序有序,应该返回0.
思路分析:
代码实现:
class Solution {
public int findUnsortedSubarray(int[] nums) {
int len = nums.length - 1;
if (len == 0) return 0;
int[] arr = nums.clone();
Arrays.sort(arr);
boolean left = false; // 记录左边界
boolean right = false; // 记录右边界
int i = 0, j = len;
for (; i <= j;) {
if (arr[i] == nums[i]) {
i++;
} else {
left = true; // 找到了左边界
}
if (arr[j] == nums[j]) {
j--;
} else {
right = true; // 找到了右边界
}
if (left && right) {
break; // 左右边界都找到,直接返回
}
}
int result = j - i + 1;
return result == -1 ? 0 : result; // 计算长度
}
}