Leetcode 581. 最短无序连续子数组
思路
先将数组排序,然后分别从前、后依次与排好序的数组对比,一旦找到不相等的元素,就返回下标(min与max),它们之间的子序列即为所求。
代码
int findUnsortedSubarray(vector<int>& nums) {
vector<int> compare(nums);
sort(compare.begin(),compare.end());
int min = 0;
int max = 0;
int res;
//分别从前、后依次与排好序的数组对比,一旦找到不相等的元素,就返回下标,min与max之间的子序列即为所求
for (int i = 0; i < nums.size(); i++) {
if (nums[i] != compare[i]) {
min = i;
break;
}
}
for (int j = nums.size()-1; j>0; j--) {
if (nums[j] != compare[j]) {
max = j;
break;
}
}
if (max == min) res = 0; //max=min会在数组本身就是有序的情况出现,要分开讨论
else res = max - min + 1;
return res;
}