class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int min = INT_MAX;
int max = INT_MIN;
bool flag = false;
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] < nums[i - 1]) flag = true;
if (flag) min = std::min(min, nums[i]);
}
flag = false;
for (int i = nums.size() - 2; i >= 0; --i) {
if (nums[i] > nums[i + 1]) flag = true;
if (flag) max = std::max(max, nums[i]);
}
int l;
for (l = 0; l < nums.size(); ++l)
if (nums[l] > min) break;
int r;
for (r = nums.size() - 1; r >= 0; --r)
if (nums[r] < max) break;
return l > r ? 0 : r - l + 1;
}
};