leetcode-581. 最短无序连续子数组-找到第一次出现的局部降序,局部升序

581. 最短无序连续子数组

class Solution {
    public int findUnsortedSubarray(int[] nums) {
       int res = 0;
        if(nums.length == 1 ){
            return res;
        }
        int length = nums.length;
        int begin = 0;
        int end = -1; //因为如果end<=begin应该是0,初始化为0那就成1了
        //假设最小值为第一个数字,让max为最小值,遇到更大的会更新的
        int max = nums[0];
        //假设最大值为最后一个数字,让min为最大值,遇到更小会更新的
        int min = nums[length - 1];
        for(int i = 0; i < nums.length; i++){
            if(nums[i] < max ){ //遇到一个比max小的,就发生了局部降序,记录此时的值为end,一直跟新end,直到最后一次发生局部降序位置
                 end = i;
            }else{ //遇到比max还大的就更新,就是说当前的数再跟前一个数比较,如果全部进入else以此保证部分升序
                max = nums[i];
            }

            if(nums[length - 1 - i] > min){ //lengthen-1 - i就是从后向前遍历,假如找到了比min大的,发生了局部升序,记录为begin,一直更新begin,直到最后以此发生局部升序的位置,此处就是最终的end
                begin = length - i - 1;
            }else{
                min = nums[length - 1 - i];
            }
        }
        return end - begin + 1;
    }
}

 

posted on 2022-10-10 00:16  老菜农  阅读(13)  评论(0编辑  收藏  举报

导航