3
int max_value = 1000000;4
int min_value = -1000000;6
int findUnsortedSubarray(vector<int> &nums) {7
// max_list refers to: the max value on the left side of the current element8
// min_list refers to: the min value on the right side of the current10
vector<int> max_list(nums.size(), 0);11
vector<int> min_list(nums.size(), 0);12
min_list[nums.size() - 1] = max_value;13
max_list[0] = min_value;16
for (int i = nums.size() - 2; i >= 0; i--) min_list[i] = min(min_list[i + 1], nums[i + 1]);18
for (int i = 1; i < nums.size(); i++) max_list[i] = max(max_list[i - 1], nums[i - 1]);22
while (left < nums.size() && min_list[left] >= nums[left]) left++;25
int right = nums.size() - 1;26
while (right >= 0 && max_list[right] <= nums[right]) right--;28
if (left == nums.size()) // monotonic ascending array31
return (right - left + 1);