题目:
给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
你找到的子数组应是最短的,请输出它的长度。
示例 1:
输入: [2, 6, 4, 8, 10, 9, 15]
输出: 5
解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。
思路:
(1)将原数组复制一份到一个新数组中,然后将原数组排序完成,接下来开始比对
(2)先从左边开始比对,将两个数组的元素进行比较,如果出现两个数组中第一次元素不同的情况,那么将这个下标记录下来
(3)紧接着开始从右边寻找最后一个元素不同的下标,注意,此时的循环截至条件是寻找的范围要大于或者等于之前找到的第一个元素不同的下标。
源码:
class Solution {
public int findUnsortedSubarray(int[] nums) {
if (nums.length < 2) {
return 0;
}
int[] tmp = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
tmp[i] = nums[i];
}
// System.arraycopy(nums, 0, tmp, 0, nums.length);
Arrays.sort(nums);
int k = 0;
for (; k < nums.length; k++) {
if (nums[k] != tmp[k]) {
break;
}
}
int j = nums.length - 1;
for (; j >= k; j--) {
if (nums[j] != tmp[j]) {
break;
}
}
return j - k + 1;
}
}