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;
    }
}