581.Shortest Unsorted Continuous Subarray
Example 1:
Input: [2, 6, 4, 8, 10, 9, 15]
Output: 5
Explanation: You need to sort [6, 4, 8, 10, 9] in ascending order to make the whole array sorted in ascending order.
Note:
Then length of the input array is in range [1, 10,000].
The input array may contain duplicates, so ascending order here means <=.class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int left=0;
int right=nums.size()-1;
while(left<right)
{
if(nums[left]>nums[left+1] && nums[right-1]>nums[right])
break;
if(nums[left]<=nums[left+1]) left++;
if(nums[right-1]<=nums[right])right--;
}
if(left >= right) return 0;
int res=0;
int Nmax=INT_MIN;
int Nmin=INT_MAX;
for(int i=left;i<=right;i++)
{
Nmax=max(Nmax,nums[i]);
Nmin=min(Nmin,nums[i]);
}
for(int i=left-1;i>=0;i--)
if(nums[i]>Nmin) res++;
else break;
for(int j=right+1;j<nums.size();j++)
if(nums[j]<Nmax) res++;
else break;
//cout<<Nmax<< " "<< Nmin<<endl;
//cout<<left << " "<< right<<" " <<res<<endl;
return res+right-left+1;
}
};Last updated