代码随想录算法训练营第二天 | 题目2(LeetCode209.长度最小的子数组)

简介: LeetCode209.长度最小的子数组

这道题利用了滑动窗口,所以来记录一下

欢迎大家指出我的问题😊

欢迎大家指出我的问题😊

欢迎大家指出我的问题😊

原题链接:209. 长度最小的子数组 - 力扣(LeetCode)

这是Carl哥的分享:代码随想录 (programmercarl.com)

题目图片3.1.png

🍔这里就不写暴力解法了

看   滑动窗口

其实也是定义了两个指针

时间复杂度:O(n)

空间复杂度:O(1)

下面的图片是Carl哥的😂 3.2.png

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int sum=0,result=INT32_MAX,j=0,len=0;
        for(int i=0;i<nums.size();i++)
        {
            sum+=nums[i];
            while(sum>=target)
            {
                len=i-j+1;
                result=result<len?result:len;
                sum-=nums[j++];
            }
        }
        return result==INT32_MAX?0:result;//尝试这种写法
    }
};

下面解释一下代码里面的INT32_MAX是什么意思3.3.png

不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。


意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为 -INT32_MAX-1


🚥🚥🚥🚥🚥🚥


外加一道题


904. 水果成篮 - 力扣(LeetCode)

3.4.png

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int l=0,r=0,res=0,cnt=0;
        vector<int>v(fruits.size()+1,0);
        while(r<fruits.size())
    {
            if(v[fruits[r]]==0)
            {
              cnt++;
      }   
            v[fruits[r]]++;  
            while(cnt>2)
      {
                v[fruits[l]]--;
                if(v[fruits[l]]==0)//每少一个cnt,l就向前移一位
                {          //因为不能加上0,加上等于白加
                  cnt--;
        }    
                l++;              //l必须要在后面      
            }
            res=max(res,r-l+1);
            r++;//窗口前移   r=0---fruits[0] 
          //         r=1---fruits[1]
        //           r=2---fruits[2]         
        }
        return res;
    }
};

如果看不懂代码,可以去Carl哥那里看一下具体滑动的过程,链接在上面

🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈🏳️‍🌈

欢迎大家指出我的问题😊

欢迎大家指出我的问题😊

欢迎大家指出我的问题😊

相关文章
|
11天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
17 2
|
11天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
15 2
|
11天前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
4天前
|
人工智能 算法 Java
java中经典算法代码整理
java中经典算法代码整理
16 0
|
4天前
|
算法 IDE 开发工具
c语言的经典算法代码
c语言进阶11-经典算法代码
|
5天前
|
算法
数据结构和算法常见的问题和代码
数据结构和算法常见的问题和代码
|
8天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
3天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
23 8
|
5天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
6天前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。