LeetCode_581. Shortest Unsorted Continuous Subarray
  Ohl6n170bzPf 2023年11月02日 16 0


题目描述:

LeetCode_581. Shortest Unsorted Continuous Subarray_i++


思路:将数组排序,然后采用双指针法从前到后比较排序后数组和元素组对应元素是否相同,不同则找到始末位置。返回长度

class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
vector<int>::iterator itb=nums.begin();
vector<int>::iterator ite=nums.end();
vector<int> copy(itb,ite);
sort(copy.begin(),copy.end());
int i=0,j=nums.size()-1;
while(i<copy.size()){
if(copy[i]!=nums[i])
break;
i++;
}
while(j>=0){
if(copy[j]!=nums[j])
break;
j--;
}
return i<=j?j-i+1:0;
}
};

思路2:采用一次遍历,从前向后遍历。这段序列一定是后半部分有一段有序的子序列(个数可以为0),前半部分有一段有序的子序列(个数也可以为0),分别找到前后有序子序列的终止位置和起始位置,则中间一部分就是需要调整的部分。

class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int min=INT_MIN,max=INT_MAX;
int end=0,start=nums.size()-1;
int n=nums.size();
for(int i=0;i<nums.size();i++){
if(nums[i]>=min){
min=nums[i];
end++;
}else
end=0;
if(nums[n-1-i]<=max){
max=nums[n-1-i];
start++;
}else
start=0;
}
return std::max(0,n-end-start);
}
};


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  rEZj93RghFYQ   2023年11月02日   20   0   0 i++leetcode-java
  dUbcXj9lnElT   2023年11月02日   29   0   0 #includei++c++
  dUbcXj9lnElT   2023年11月02日   19   0   0 #include连通块i++
Ohl6n170bzPf
最新推荐 更多