题目:
代码:
class Solution {
public:
/*//超时了,时间复杂度O(n^2)
int findUnsortedSubarray(vector<int>& nums) {
int begin=INT_MAX,end=0;
bool flag=false;
for(int i=0;i<nums.size();i++){
for(int j=i;j>=0;j--){
if(nums[i]<nums[j]){
//begin=j;
if(j<begin){
begin=j;
}
end=i;
flag=true;
}
}
}
if(flag) return end+1-begin;
else return 0;
}*/
int findUnsortedSubarray(vector<int>& nums) {
int len=nums.size();
if(len<=1) return 0;
int begin=len-1,end=0,curmax=nums[0],curmin=nums[len-1];
for(int i=0;i<len;i++){
if(curmax<=nums[i]){
curmax=nums[i];
}
else{
end=i;//寻找最大的位置不对的元素
}
if(curmin>=nums[len-1-i]){
curmin=nums[len-1-i];
}
else{
begin=len-1-i;//寻找最小的位置不对的元素
}
}
if(end==0) return 0;//如果未找到,说明是排好序的
else return end-begin+1;
}
};
榜首:
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
ios::sync_with_stdio(false);
int nmax = INT_MIN,nmin = INT_MAX;
int len = nums.size();
int i = 0 ,left = 0 , right = len;
bool flag = false;
for(i = 1 ; i < len ; i ++){
if(nums[i] < nums[i - 1]){ flag = true;}
if(flag) nmin = min(nmin,nums[i]);
}
if(!flag) {return 0;}
flag = false;
for(i = len-2 ; i >= 0 ; i--){
if(nums[i] > nums[i + 1]){flag = true;}
if(flag) nmax = max(nmax,nums[i]);
}
for(i = 0; i < len ; i++){
if(nmin < nums[i]){
left = i;
break;
}
}
for(i = len-1 ; i >= 0 ; i --){
if(nmax > nums[i]){
right = i;
break;
}
}
return right - left + 1;
}
};