LeetCode - 581. Shortest Unsorted Continuous Subarray

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

You need to find the shortest such subarray and output its length.

Example 1:

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

Note:

  1. Then length of the input array is in range [1, 10,000].
  2. The input array may contain duplicates, so ascending order here means <=.

找到第一个小于自身左边的下标,第一个大于自身右边的下标,求差。

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;
        int len = nums.length, start = 1, end = 0;
        for (int i=0; i<len; i++)
            if (!judge(nums, i)) {
                start = i;
                break;
            }
        for (int i=len-1; i>start; i--)
            if (!judge(nums, i)) {
                end = i;
                break;
            }
        return end - start + 1;
    }

    private boolean judge(int[] nums, int index) {
        for (int i=0; i<index; i++)
            if (nums[i] > nums[index])
                return false;
        for (int i=index+1; i<nums.length; i++)
            if (nums[i] < nums[index])
                return false;
        return true;
    }
}

简洁优化版:

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;
        int len = nums.length, start = -1, end = -2;
        int min = nums[len-1], max = nums[0];
        for (int i=0; i<len; i++) {
            max = Math.max(nums[i], max);
            min = Math.min(nums[len - i - 1], min);
            if (nums[i] < max)
                end = i;
            if (nums[len - i - 1] > min)
                start = len - i - 1;
        }
        return end - start + 1;
    }

}

原文地址:https://www.cnblogs.com/wxisme/p/9797920.html

时间: 2024-08-29 15:34:30

LeetCode - 581. Shortest Unsorted Continuous Subarray的相关文章

581. Shortest Unsorted Continuous Subarray (LeetCode)

Description: Given an integer array, 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, too. You need to find the shortest such subarray and output

581. Shortest Unsorted Continuous Subarray 最短未排序的连续子阵列

Given an integer array, 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, too. You need to find the shortest such subarray and output its length. E

581. Shortest Unsorted Continuous Subarray

1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 int findUnsortedSubarray(vector<int>& nums) 12 { 13 int sz=nums.size(); 14 int beg=-1,end=-2,maxele=nums[0],m

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组 581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. LeetCode581. Shortest Unsorted Continuous Subarray 示例 1: 输入: [2, 6, 4, 8, 10, 9, 15] 输出: 5 解释: 你只需要对 [6, 4, 8,

[LeetCode] Shortest Unsorted Continuous Subarray 最短无序连续子数组

Given an integer array, 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, too. You need to find the shortest such subarray and output its length. E

Shortest Unsorted Continuous Subarray LT581

Given an integer array, 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, too. You need to find the shortest such subarray and output its length. E

Shortest Unsorted Continuous Subarray

Given an integer array, 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, too. You need to find the shortest such subarray and output its length. E

LeetCode算法题-Shortest Unsorted Continuous Subarray(Java实现)

这是悦乐书的第267次更新,第281篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第134题(顺位题号是581).给定一个整数数组,找到一个连续的子数组,按升序对该子数组进行排序,使得整个数组也按升序排序.找到最短的无序连续子数组并输出其长度.例如: 输入:[2,6,4,8,10,9,15] 输出:5 说明:按升序对[6,4,8,10,9]子数组进行排序,以使整个数组按升序排序. 注意: 数组的长度在[1,100]范围内. 数组可能包含重复项,因此这里的升序表示<=

LeetCode:Continuous Subarray Sum

523. Continuous Subarray Sum Add to List Given a list of non-negative numbers and a target integer k, write a function to check if the array has a continuous subarray of size at least 2 that sums up to the multiple of k, that is, sums up to n*k where