题目链接
英文链接:https://leetcode.com/problems/shortest-unsorted-continuous-subarray/
中文链接:https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/
题目详述
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
示例 1:
1 | 输入: [2, 6, 4, 8, 10, 9, 15] |
说明 :
- 输入的数组长度范围在 [1, 10,000]。
- 输入的数组可能包含重复元素 ,所以升序的意思是<=。
题目详解
方法一:
- 将原数组拷贝一份,然后对拷贝后的数组进行排序。
- 对比原数组和排序后的数组,除去前面一部分和后面一部分相同的元素,剩余区间的长度就是结果。
- 时间复杂度为 O(nlogn)。
1 | public class LeetCode_00581 { |
方法二:
- 分为两部分进行考虑。
- 单独调整区间 [0 , r] 可使整个数组有序。
- 单独调整区间 [l, n - 1] 可使整个数组有序。
- 求出 l 和 r 后,调整区间 [l, r] 可使整个数组有序。
- 所以问题转化为求 l 和 r,而 l 和 r 比较容易求出。
- 时间复杂度为 O(n)。
1 | public class LeetCode_00581 { |