-
暴力解法是使用两个for循环来分别代码序列的起始位置与终止位置
-
优化后本质上还是双指针的解法,只不过解决过程中确定序列范围如同一个滑动的窗口在数组中来回比对,所以也称为滑动窗口
-
在写这个代码不是掉在坑里了,在循环判断
sum >= target
时,在外面又套了层if
判断语句,从而在力扣的线上提交时发生结果错误 -
总结就是,代码太简单,思想真深邃,看似轻松完成,实则费时费力
-
#include <iostream> #include <vector> class Solution { public: int minSubArrayLen(int target, std::vector<int>& nums) { int len = nums.size(), result = len + 1; for (int i = 0, j = 0, sum = 0; i < len && j < len; ++j) { sum += nums.at(j); while (sum >= target) { result = std::min(result, j - i + 1); sum -= nums.at(i++); } } return result == len + 1 ? 0 : result; } }; int main() { Solution s; std::vector<int> nums {2, 3, 1, 2, 4, 3}; std::cout << s.minSubArrayLen(7, nums) << std::endl; // std::vector<int> nums {1, 1, 1, 1, 1, 1, 1, 1}; // std::cout << s.minSubArrayLen(10, nums) << std::endl; return 0; }
- 出现问题的地方是在第10行处,又套子一层判断语句
- 当天另一题
- 汇总