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


    题目:

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

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

    分析:

    在我第一次看完这个题目的时候,我就觉得可以用O(n)的时间复杂度完成这个代码,首先他要求是连续的子数组,所以只要是有不符合要求的位置,就用坐标把左右位置标志出来就可以完成了。

    过程:

    1、如果整个数组都没有倒序的位置或者是数组长度小于2,我就直接返回0。

    2、当发现第一个倒序的位置,将is变为false,表示这个数组有倒序的数字,并且将左坐标记下来,并用max记录当前最大值。

    3、用max一直向后比较,只要max比当前位置数组中的数字大,说明顺序有问题,将右坐标移动到当前位置。如果max小,那么就用nums数组当前位置数字替换max,继续向后比较。

    4、完成这一步骤后,将左右标记范围内最小的数字找出来,从左坐标向前比较,找出首个小于等于它的数字的位置,记录为做坐标,最后返回范围大小。

    代码:

     1 class Solution{
     2     public int findUnsortedSubarray(int[] nums) {
     3         if(nums.length==1)
     4             return 0;
     5         int max=nums[0];
     6         boolean is=true;
     7         int stl=0;
     8         int str=0;
     9         for(int n=1;n<nums.length;++n){
    10             if(is&&nums[n]<nums[n-1]) {
    11                 is=false;
    12                 max=nums[n-1];
    13                 stl=n-1;
    14             }
    15             if(max>nums[n])
    16                 str=n;
    17             else
    18                 max=nums[n];
    19             System.out.println(n+" "+is+" "+stl+" "+str);
    20         }
    21         int min=nums[stl+1];
    22         for(int n=stl+1;n<=str;++n)
    23             if(nums[n]<=min)
    24                 min=nums[n];
    25         System.out.println(min);
    26         for(int n=stl;n>=0;--n) {
    27             if(min>=nums[n]) {
    28                 stl=n+1;
    29                 break;
    30             }
    31             else
    32                 if(n==0)
    33                     stl=0;
    34         }
    35         if(str-stl>0)
    36             return (str-stl+1);
    37         else
    38             return 0;
    39     }
    40 }

    写的比较长,但是我觉得思路还是比较清晰的,如果看客有更好的做法,欢迎分享。

  • 相关阅读:
    druid + mybatis-spring使用注解方式整合
    druid+dbutils+spring整合web项目
    spring继承注入和自动注入
    spring命名空间注入
    spring入门学习第二篇
    spring入门学习第一篇
    mybatis插入数据返回主键
    北京充电桩数据的获取与展示
    有关“GIS讲堂”升级与更改logo的通知
    一个GISER 6.7的祝福
  • 原文地址:https://www.cnblogs.com/CHAHA123/p/10562843.html
Copyright © 2020-2023  润新知