文章目录
- 前言
- 一、209. 长度最小的子数组
- 二、904. 水果成篮
- 总结
前言
一个本硕双非的小菜鸡,备战24年秋招,计划刷完卡子哥的刷题计划,加油!
推荐一手卡子哥的刷题网站,感谢卡子哥。代码随想录
一、209. 长度最小的子数组
力扣209. 长度最小的子数组
Note:滑动窗口经典题目
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int result = INT32_MAX;
int ans = 0;
int begin = 0;
int length = 0;
for (int i = 0; i < nums.size(); i++) {
ans += nums[i];
while (ans >= target) {
length = i - begin + 1;
result = result < length ? result : length;
ans -= nums[begin++];
}
}
return result == INT32_MAX ? 0 :result;
}
};
二、904. 水果成篮
Note:对我来说真的很难,有好几次思路分析错了,最后拿演算纸划拉划拉才弄明白,记住这道题了。
哈希表应该会简单一点,但是我暂时还没有练到那里,以后日子再回来搞他,希望到时候我会更厉害一点。
说实话思路乱了比啥都难受,这一个中等题给我难了半天就是不对,直到最后我分析好思路了也仍然出现了bug,还是自己太菜了。。。
class Solution {
public:
int totalFruit(vector<int>& fruits) {
int result = 0;
int fruit1 = 0;
int fruit2 = 0;
int fruit3 = 0;
int size = 0;
for (int i = 0; i < fruits.size(); i++) {
if (fruits[fruit1] != fruits[i] && fruits[fruit2] != fruits[i]) {
if (fruit1 != fruit2) {
fruit1 = fruit3;
}
fruit2 = i;
}
if (fruits[fruit3] != fruits[i]) {
fruit3 = i;
}
size = i - fruit1 + 1;
result = result > size ? result : size;
}
return result;
}
};
总结
滑动窗口算法的基本思想是维护一个窗口,通过移动窗口的两个边界来处理问题。滑动窗口算法是一种常用的双指针算法,能够优化字符串和数组问题的时间复杂度,被广泛应用于各种子串或子数组问题的求解。