LeetCode:最短无序子数组

题目描述(题目链接)

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

请你找出符合题意的 最短 子数组,并输出它的长度。

思路

  • 最终的结果是升序的,我们先将原数组升序排序保存在一个新的数组中
  • 新数组和旧数组进行比对,从左往右遍历,找到第一个不相等的,记录下标
  • 从右往左遍历,找到第一个不相等的,记录下标
  • 右边记录的下标如果大于左边记录的下标,说明存在无序子集,那么返回右边的下标-左边的下标+1;反之说明不存在,返回0

代码

class Solution {
    public int findUnsortedSubarray(int[] nums) {
        int[] snums=nums.clone();
        Arrays.sort(snums);
        int left=0;
        int right=nums.length-1;
        //左边
        for(;left<nums.length;left++){
            if(nums[left]!=snums[left]){
                break;
            }
        }
        //右边
        for(;right>=0;right--){
            if(nums[right]!=snums[right]){
                break;
            }
        }
        return right>left?(right-left+1):0;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43939602/article/details/114312347