LC——最短无序连续子数组

LC——最短无序连续子数组

题目链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/
要求:

给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。

(这是目前提交次数最多,错的最多的题目,快十次了,可能一开始的想法就是错误的,导致解决了一个问题又出现另外的问题。一开始想的是从前往后遍历,出现乱序的记录一下起始下标,再从后往前遍历,记录结束的下标,结束的下标减开始的下标就是乱序的长度。结果出现了各种问题,只能换种思路了。)

代码:

public static int findUnsortedSubarray(int[] nums) {
        int[] bnums = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            bnums[i] = nums[i];
        }
        Arrays.sort(nums);
        int startIndex = 0;
        for (int i = 0; i < nums.length; i++) {
            if(bnums[i] != nums[i]){
                startIndex = i;
                break;
            }
        }
        int endIndex = 0;
        for (int i = nums.length-1; i >= 0; i--) {
            if(bnums[i] != nums[i]){
                endIndex = i;
                break;
            }
        }
        return endIndex-startIndex>0?endIndex-startIndex+1:endIndex-startIndex;
    }

思路:
1.首先新建一个一模一样的数组
2.对原来的数组排序
3.从头遍历,对比新建的数组,如果出现相同下标位置的数不一样,记录一下,同理从后往前遍历一次
4.两个下标的差值,如果大于0,则加1为长度,负责就是差值(0)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值