class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int n=nums.size();
int lo=0,hi=n-1;
while(lo<n-1&&nums[lo]<=nums[lo+1])lo++;
while(hi>0&&nums[hi]>=nums[hi-1])hi--;
int min=nums[lo],max=nums[lo];
for(int i=lo;i<hi+1;i++){
min=min<nums[i] ? min : nums[i];
max=max>nums[i] ? max : nums[i];
}
for(int i=hi;i<n;i++){
if(nums[i]<max)
hi=i;
}
for(int i=lo;i>=0;i--){
if(nums[i]>min)
lo=i;
}
return (hi-lo)>0?(hi-lo+1):0;
}
};