209. 长度最小的子数组
一眼暴力
一,暴力做题思路:
暴力没什么好说的,就纯暴力解就对了
1 class Solution { 2 public: 3 int minSubArrayLen(int target, vector<int>& nums) { 4 int result = 99999; //为了让result的初始值可以被轻易替代 5 for (int i = 0; i < nums.size(); i++) { 6 int sum = 0; 7 for (int j = i; j < nums.size(); j++) { 8 sum += nums[j]; //这里注意一定要先加完以后在进行判断 9 if (sum >= target) { 10 result = min(result, j - i + 1); 11 break; 12 } 13 } 14 } 15 if (result == 99999)return 0; // 若result的值自始至终没有被替换过,则证明没有达到条件,则返回0 16 else return result; 17 } 18 };
二,快慢指针的滑动窗口的做题思路
1,把快慢指针圈起来的区域看作一个滑动窗口,每次快指针向外面拓展,窗口的值就增大,当窗口值符合条件时,更新数据,然后把慢指针++,相当于回缩窗口,让窗口回到没有符合条件的时候(如果回缩一次不够,那么就两次,直到符合条件为止,故这里不能用 if,用 while !
2,剩下的就和暴力差不多了,快慢指针的作用是用一个 for 完成了 两个 for 完成的事
1 class Solution { 2 public: 3 int minSubArrayLen(int target, vector<int>& nums) { 4 int slow = 0, sum = 0, result = 99999; //经典初始化 5 for (int fast = 0; fast < nums.size(); fast++) { 6 sum += nums[fast]; 7 while (sum >= target) { //这里注意一定不是if,而是while!!因为可能sum -= nums[slow] 后,仍然符合 sum >= target 的条件 8 result = min(result, fast - slow + 1); 9 sum -= nums[slow]; 10 slow++; //注意窗口要回缩 11 } 12 } 13 if (result == 99999)return 0; 14 else return result; 15 } 16 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端