代码随想录一刷打卡——滑动窗口

本文介绍了如何使用滑动窗口算法解决LeetCode中的两道题目:209.长度最小的子数组和904.水果成篮。作者分享了代码实现和学习心得,强调了滑动窗口在优化数组问题中的重要性。
摘要由CSDN通过智能技术生成

文章目录

  • 前言
  • 一、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. 水果成篮

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;
    }
};

总结

滑动窗口算法的基本思想是维护一个窗口,通过移动窗口的两个边界来处理问题。滑动窗口算法是一种常用的双指针算法,能够优化字符串和数组问题的时间复杂度,被广泛应用于各种子串或子数组问题的求解。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力找工作的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值