Shortest Unsorted Continuous Subarray LeetCode Solution

Last updated on October 5th, 2024 at 03:45 pm

Here, We see Shortest Unsorted Continuous Subarray LeetCode Solution. This Leetcode problem is done in many programming languages like C++, Java, JavaScript, Python, etc. with different approaches.

List of all LeetCode Solution

Topics

Array

Companies

Google

Level of Question

Medium

Shortest Unsorted Continuous Subarray LeetCode Solution

Shortest Unsorted Continuous Subarray LeetCode Solution

Problem Statement

Given an integer array nums, you need to find one continuous subarray such that if you only sort this subarray in a non-decreasing order, then the whole array will be sorted in a non-decreasing 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

1. Shortest Unsorted Continuous Subarray Leetcode Solution C++

class Solution {
public:
    int findUnsortedSubarray(vector<int>& nums) {
        int n = nums.size();
        int l = -1, r = -1;
        for(int i = 0; i < n - 1; i++) {
            if(nums[i] > nums[i + 1]) {
                l = i;
                break;
            }    
        }
        for(int i = n - 1; i >= 1; i--) {
            if(nums[i] < nums[i - 1]) {
                r = i;
                break;
            }
        }
        if(l == -1) return 0;
        int mini = nums[l], maxi = nums[l];
        for(int i = l; i <=r; i++) {
            mini = min(mini, nums[i]);
            maxi = max(maxi, nums[i]);
        }
        l = upper_bound(nums.begin(), nums.begin() + l, mini) - nums.begin();
        r = lower_bound(nums.begin() + r + 1, nums.end(), maxi) - nums.begin();
        return r - l;
    }
};

2. Shortest Unsorted Continuous Subarray Leetcode Solution Java

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int len = nums.length - 1, left = -1, right = -1,
            max = nums[0], min = nums[len];
        for (int i = 1; i <= len; i++) {
            int a = nums[i], b = nums[len-i];
            if (a < max) right = i;
            else max = a;
            if (b > min) left = i;
            else min = b;
        }
        return Math.max(0, left + right - len + 1);
    }
}

3. Shortest Unsorted Continuous Subarray Leetcode Solution JavaScript

var findUnsortedSubarray = function(nums) {
    let len = nums.length - 1, left = -1, right = -1,
        max = nums[0], min = nums[len]
    for (let i = 1; i <= len; i++) {
        let a = nums[i], b = nums[len-i]
        a < max ? right = i : max = a
        b > min ? left = i : min = b
    }
    return Math.max(0, left + right - len + 1)
};

4. Shortest Unsorted Continuous Subarray Leetcode Solution Python

class Solution(object):
    def findUnsortedSubarray(self, nums):
        lenN, left, right = len(nums) - 1, -1, -1
        maxN, minN = nums[0], nums[lenN]
        for i in range(1, len(nums)):
            a, b = nums[i], nums[lenN-i]
            if a < maxN: right = i
            else: maxN = a
            if b > minN: left = i
            else: minN = b
        return max(0, left + right - lenN + 1)
Scroll to Top