LeetCode/最短无序连续子数组
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的最短 子数组,并输出它的长度
1. 排序后比较
先排序,再分别找第一个不在位的的元素,做差
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
if(nums.size()<=1) return 0;
vector<int> temp = nums;
sort(temp.begin(),temp.end());
int i = 0;
int j = nums.size()-1;
while(i<j){
bool flag = false;
if(nums[i]==temp[i]){ i++; continue;}
if(nums[j]==temp[j]){ j--; continue;}
break;
}
if(i>=j) return 0;
return j-i+1;
}
};
2. 一趟遍历
由于我们要找的是最远不在位元素,可以一边记录当前最值,一边进行比较,所以无序排序
class Solution {
public:
int findUnsortedSubarray(vector<int>& nums) {
int n = nums.size();
int maxn = INT_MIN, right = -1;
int minn = INT_MAX, left = -1;
for (int i = 0; i < n; i++) {//已遍历最大值大于当前值,说明当前值不在位
if (maxn > nums[i]) right = i;//从左往右,得到无序右边界
else maxn = nums[i];//更新当前最大值
if (minn < nums[n - i - 1]) //已遍历最小值小于当前值,说明当前值不在位
left = n - i - 1; //从右往左,得到无序左边界
else minn = nums[n - i - 1];//更新当前最小值
}
return right == -1 ? 0 : right - left + 1;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~