欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

581. 最短无序连续子数组

程序员文章站 2022-03-24 15:29:42
...

题目:

581. 最短无序连续子数组
581. 最短无序连续子数组

题解:

1. 解释一:

581. 最短无序连续子数组
581. 最短无序连续子数组

2. 解释二:

581. 最短无序连续子数组

3. 解释三:

581. 最短无序连续子数组

4. 解释四:

581. 最短无序连续子数组

代码:

public class code581 {

    public static int findUnsortedSubarray(int[] nums) {
        int len = nums.length;
        if(len <= 1)
        {
            return 0;
        }

        int left = len;
        int right = -1;

        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for(int i = 0; i < len; i++)
        {
            // 从左到右找出最后一个破坏递增的数
            if(nums[i] >= max)
            {
                max = nums[i];
            }
            else
            {
                right = i;
            }
            // 从右到左找出最后一个破坏递减的数
            if(nums[len - i - 1] <= min)
            {
                min = nums[len - i - 1];
            }
            else
            {
                left = len - i - 1;
            }
        }

        if(right > left)
        {
            return right - left + 1;
        }
        else // 当给定的数组,默认就是升序的话,则不需要进行调整,子数组长度为 0
        {
            return 0;
        }
    }

    public static void main(String[] args) {
        int nums[] = { 2, 6, 4, 8, 10, 9, 15 };
        int res = findUnsortedSubarray(nums);
        System.out.println(res);
    }
}

参考:

  1. 最短无序连续子数组
  2. 581. 最短无序连续子数组
  3. 时间超过100%的Java解法:
  4. 两次遍历 + 排序比对 python3
  5. Java 击败100% 时间复杂度O(N) 空间复杂度O(1)
  6. 最短无序连续子数组(O(1)空间)
  7. 不排序实现。
  8. 总结了三种想法