Given an integer array, you need to find one **continuous subarray** that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too.

You need to find the **shortest** such subarray and output its length.

**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
**<=**.

**Solution:**

Two pass, one from left and one from right.

On left, update the current max, any element that is less than current max is the left end of this subarray.

```
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int cmin = INT_MAX;
int cmax = INT_MIN;
int st = 1, nd = 0;
int l = 0;
int r = nums.size()-1;
while(r>=0){
if(nums[l] >= cmax){
cmax = nums[l];
}else{
nd = l;
}
if(nums[r] <= cmin){
cmin = nums[r];
}else{
st = r;
}
l++;
r--;
}
return nd-st+1;
}
};
```