Journal Archive

/**
 * @param {number[]} nums
 * @return {number}
 */
var findUnsortedSubarray = function(nums) {
    if (nums.length < 2 || !nums) return 0;
    
    // find largest index out of place
    let end = 0;
    let leftPointer = nums[end];
    
    // find smallest index out of place
    let start = nums.length - 1;
    let rightPointer = nums[start];
    
    
    for (let i = end, j = start; i < nums.length; i++, j--) {
        if (nums[i] < leftPointer) {
            end = i;
        } else {
            leftPointer = nums[i];
        }
        
        if (nums[j] > rightPointer) {
            start = j;
        } else {
            rightPointer = nums[j];
        }
    }
    
    return end > start ? end - start + 1: 0;
};

Day 41: Solving one of LeetCode problems

581. Shortest Unsorted Continuous Subarray Difficulty - Medium

Given an integer array nums, 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.

Return the shortest such subarray and output its length.

 

Example 1:

Input: nums = [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.
		

Example 2:

Input: nums = [1,2,3,4]
Output: 0
		

Example 3:

Input: nums = [1]
Output: 0