问题描述
给定一个整数数组,你需要找出一个连续子数组,使得该子数组中的数字是整个数组中最短的未排序序列。
输入输出格式
输入: 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