## Shortest Unsorted Continuous Subarray

Head on over here to try the problem for yourself.

I solved this problem using a two-pointer method.

#### Algorithm

The goal is to find the points where the array becomes unsorted. We use two loops, one to find the end of the unsorted sub-array and another to find the start of the unsorted sub-array. `start = end = -1` as a way to check if they were updated or not during the loops. If they were not, then array is sorted and we `return 0`. Else we return `end - start + 1`.

#### Code

``````pbulic int findUnsortedSubarray(int[] nums) {
int start = -1;
int end = -1;

int prev = 0;
//finding end
for(int i = 0; i < nums.length - 1; i++) {
// try to find the index of next
// smallest number from prev
if(nums[i] < nums[prev]) end = i;
else prev = i;
}

int prev = nums.length - 1;
//finding start
for(int i = nums.length - 1; i >= 0; i--) {
// try to find the index of nex
// biggest number from prev
if(nums[i] > nums[prev]) start = i;
else prev = i;
}

return (start < 0 && end < 0) ? 0 : end - start + 1;
}
``````

#### Testcases

``````[1,3,2,2,2]
start = 1
end = 4
``````

An odd testcase that shows the strage loop working. In this case, the whole right side of the array is unsorted. For finding `end`, we would have the following run:

i prev end
0 0 -1
1 1 -1
2 1 2
3 1 3
4 1 4

Finding `start` happens simlarly and we get a good result.