跳到主要内容

581.最短无序连续子数组

链接:581.最短无序连续子数组
难度:Medium
标签:栈、贪心、数组、双指针、排序、单调栈
简介:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。

题解 1 - typescript

  • 编辑时间:2021-08-03
  • 执行用时:164ms
  • 内存消耗:46.3MB
  • 编程语言:typescript
  • 解法介绍:排序后比对每一位找出最先不同的下标。
function findUnsortedSubarray(nums: number[]): number {
const sorted = nums.slice().sort((a, b) => a - b);
let l = -1;
let r = -1;
for (let i = 0, n = nums.length; i < n; i++) {
if (sorted[i] !== nums[i] && l === -1) {
l = i;
}
if (sorted[n - 1 - i] !== nums[n - 1 - i] && r === -1) {
r = n - 1 - i;
}
if (l !== -1 && r !== -1) break;
}
return r === -1 ? 0 : r - l + 1;
}