问题描述

给定一个整数数组,你需要找出一个连续子数组,使得该子数组中的数字是整个数组中最短的未排序序列。

输入输出格式

输入: nums,一个整数数组。 输出: 返回一个整数,表示最短未排序子数组的长度。如果整个数组已经排序,则返回0。

示例

示例 1: 输入: [1,2,2,3] 输出: 3 解释: 整个数组是 [1,2,2,3],最短的未排序子数组是 [2,2,3]

示例 2: 输入: [1,3,2,3,1] 输出: 4 解释: 整个数组是 [1,3,2,3,1],最短的未排序子数组是 [3,2,3,1]

解法一

解题思路

我们需要找到最短的未排序子数组,这意味着我们需要找到数组中第一个不是递增的元素,然后找到最后一个不是递减的元素。这两个元素之间的子数组就是最短的未排序子数组。

/** @lc app=leetcode.cn id=562 lang=javascript** [562] Shortest Unsorted Continuous Subarray*/// @lc code=start
function findUnsortedSubarray(nums) {const n = nums.length;let max = nums[n - 1], min = nums[0];let start = -1, end = -1;for (let i = 0; i < n; i++) {if (nums[i] > max) {end = i;} else {max = nums[i];}if (nums[n - 1 - i] < min) {start = n - 1 - i;} else {min = nums[n - 1 - i];}}return end >= start ? end - start + 1 : 0;
}
// @lc code=end