MarcusV(南墙大佬的搬运工)

南墙大佬的CSDN博客地址

导航

Java实现 LeetCode 581 最短无序连续子数组(从两遍搜索找两个指针)

581. 最短无序连续子数组

给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。

你找到的子数组应是最短的,请输出它的长度。

示例 1:

输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
说明 :

输入的数组长度范围在 [1, 10,000]。
输入的数组可能包含重复元素 ,所以升序的意思是<=。

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

posted on 2020-03-28 19:00  MarcusV  阅读(103)  评论(0编辑  收藏  举报