#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; //计算最大区间
}
};

京公网安备 11010502036488号