排序后比较
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
if(nums.size()<=1) return 0;
vector<int> sorted=nums;
sort(sorted.begin(),sorted.end());
int lf=0,rt=nums.size()-1;
while(lf<nums.size()&&nums[lf]==sorted[lf])
{
lf++;
}
while(rt>=0&&nums[rt]==sorted[rt])
{
rt--;
}
return rt>lf?rt-lf+1:0;
}
};
单调栈
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
if(nums.size()<=1) return 0;
stack<int> upstk,downstk;
int lf=nums.size()-1,rt=0;
for(int i=0;i<nums.size();i++)
{
while(!upstk.empty()&&nums[i]<nums[upstk.top()])
{
lf=min(lf,upstk.top());
upstk.pop();
}
upstk.push(i);
}
for(int i=nums.size()-1;i>=0;i--)
{
while(!downstk.empty()&&nums[i]>nums[downstk.top()])
{
rt=max(rt,downstk.top());
downstk.pop();
}
downstk.push(i);
}
return lf>rt?0:rt-lf+1;
}
};
本文介绍了一种通过排序和单调栈方法寻找数组中未排序子数组的算法。首先,通过比较原始数组与排序后的数组来定位未排序部分的起始和结束位置;其次,使用单调栈来优化查找过程,实现更高效的解决方案。
273

被折叠的 条评论
为什么被折叠?



