代码随想录打卡第2天 | 209. 长度最小的子数组、59. 螺旋矩阵II、58. 区间和、44. 开发商购买土地

209. 长度最小的子数组 链接:力扣209 文章:代码随想录 视频:B站讲解 状态:✅ 第一想法 看到这道题的第一想法是做一个前缀和,但是引入前缀和之后需要去减去之后恰好小于target的另一个前缀和,遍历的话复杂度就会变成 $O(n^2)$ ,然后想到了可以二分查找; 但是仔细思考一下就会发现,可以维护一个队列,不断把数据push进去,一旦找到大于target的就开始把前面的数据踢出去,直到再次小于target;这样就不需要复杂的查找了; 看完题解后的想法 队列在这里其实就是一个双指针维护的滑动窗口; 实现中遇到的困难 result需要判断当前窗口大小和历史result谁更小,使用双指针滑动窗口不会有问题,但是如果是用队列来维护滑动窗口,需要使用queue.size(),返回的类型是size_t,需要强制转换成int; 一开始还给result直接赋值0,但是这样在min里会锁死最小值; 代码 class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { int sum = 0; int result = INT_MAX; int left = 0; for (int right = 0; right < nums.size(); right++) { sum += nums[right]; while (sum >= target) { result = min(result, right-left+1); sum = sum - nums[left]; left++; } } return result == INT_MAX ? 0 : result;; } }; 59. 螺旋矩阵II 链接:力扣59 文章:代码随想录 视频:B站讲解 状态:❌ 第一想法 看完题目的第一想法就是如何移动坐标去填充数据,然后就被边界条件卡住了; ...

March 5, 2026 · KahanaT800