描述:
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
示例 1:
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
思路分析:
官方实现之一:将数组排序、然后比较两个数组中最左边和最右边不对应的位置
时间复杂度:O(nlogn) 。排序消耗 nlogn 的时间。
空间复杂度:O(n) 。我们拷贝了一份原数组来进行排序。
还可以使用其他的方法提高时间复杂度到O(n)
代码实现:
class Solution {
public int findUnsortedSubarray(int[] nums) {
int[] cnums = nums.clone();
Arrays.sort(cnums);
int i = 0, j = cnums.length - 1;
while (i < cnums.length && nums[i] == cnums[i]) {
i++;
}
while (j >=0 && nums[j] == cnums[j]) {
j--;
}
return j > i ? j - i + 1 : 0;
}
}