#P3015. 最短无序连续子数组
最短无序连续子数组
最短无序连续子数组
题目描述
给定一个整数数组 nums,请你找出一个连续的子数组,使得只要把这个子数组按升序排序,整个数组都会变为升序排序。
返回满足条件的最短子数组的长度。如果整个数组已经有序,返回 0。
输入格式
第一行一个正整数 n,表示数组长度。
第二行 n 个整数,表示数组 nums。
输出格式
一行一个整数,表示最短子数组的长度。
样例
7
2 6 4 8 10 9 15
5
4
1 2 3 4
0
5
5 4 3 2 1
5
样例解释
- 样例 1:子数组 [6,4,8,10,9](第 2 到第 6 个元素)排序后数组变为 [2,4,6,8,9,10,15],整个数组有序。不存在更短的满足条件的子数组,答案为 5。
- 样例 2:数组已经有序,无需排序任何子数组,答案为 0。
- 样例 3:整个数组逆序,必须排序全部 5 个元素才能使数组有序,答案为 5。
数据范围
- 1 ≤ n ≤ 10^4
- -10^5 ≤ nums[i] ≤ 10^5
提示
将数组与排序后的版本比较,从左找到第一个不匹配的位置,从右找到最后一个不匹配的位置,二者之间的距离即为答案。时间复杂度 O(n log n),空间复杂度 O(n)。