#include <climits>
class Solution {
public:
    //双指针检测,一个数比左边的数的最大数小则需要往前移,比右边的最小数小则需要往后移;
    int findUnsortedSubarray(vector<int>& nums) {
        int n = nums.size();
		//双指针,
        int Max = nums[0], Min = nums[n-1], l = -1, r=-2; 

        for(int i=1; i<n; i++){
            Max = max(Max, nums[i]);
            Min = min(Min , nums[n-i-1]);  //双指针,更新最大值最小值

            if(Max != nums[i]){ //记录需要和其数左边数交换的数位置
                r = i;
            }
            if(Min!=nums[n-1-i]){	//记录需要和其数右边数交换的数的位置
                l = n-1-i;
            }
        }

        return r - l + 1;  //计算最大区间
    }
};