题解 | #最短无序连续子数组#
最短无序连续子数组
http://www.nowcoder.com/practice/d17f4abd1d114617b51e951027be312e
排序 + 比较
一开始认为只要前后找不符合升序的地方 然后两个下标一减就完事了 提交后尴尬了...又重新想了一下,一个值不在它应该在的地方,说明它必然要重新排序,所以...
- 拷贝原数组,排序
- 分别从前后找第一个值不等的地方,返回 二者下标之差+1
- 注意可能本身不需要排序 直接返回0
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int findUnsortedSubarray(vector<int>& nums) {
// write code here
vector<int>vec(nums);
sort(vec.begin(), vec.end());
int l = 0;
int i;
for (i = 0; i < nums.size(); i++) {
if (vec[i] != nums[i]) {
l = i;
break;
}
}
if(i == nums.size())return 0;
int r = 0;
for (int i = nums.size() - 1; i >= 0; i--) {
if (vec[i] != nums[i]) {
r = i;
break;
}
}
return r - l + 1;
}
};