Shortest Unsorted Continuous Subarray
给一个数组, 找最小排序大小的子数组可让数组排序.
这题是双指针, 从左侧找最大值, 然后可以知道最大值右边的数字都是应该被sort的,因为如果是已经排序的数组, 最大值应该在最右侧. 同理, 我们再弄一个指针从右往左走. 然后去两个指针之差
class Solution {
public int findUnsortedSubarray(int[] nums) {
int left = 0;
int max = nums[0];
int n = nums.length;
for(int i = 1; i < n; i++) {
if(nums[i] >= max){
max = nums[i];
}
else
{
left = i;
}
}
int right = n - 1;
int min = nums[n - 1];
for(int i = n - 1; i >= 0; i--) {
if(nums[i] <= min){
min = nums[i];
}
else
{
right = i;
}
}
if(left == 0 && right == n - 1)
return 0;
return left - right + 1;
}
}