每日一练(45):长度最小的子数组

简介: 给定一个含有 n 个正整数的数组和一个正整数 target 。

给定一个含有 n 个正整数的数组和一个正整数 target 。


找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。


示例 1:


输入:target = 7, nums = [2,3,1,2,4,3]

输出:2


解释:子数组 [4,3] 是该条件下的长度最小的子数组。


示例 2:


输入:target = 4, nums = [1,4,4]

输出:1


示例 3:


输入:target = 11, nums = [1,1,1,1,1,1,1,1]

输出:0


提示:


1 <= target <= 109

1 <= nums.length <= 105

1 <= nums[i] <= 105


来源:力扣(LeetCode)


链接:https://leetcode-cn.com/probl...


方法一:队列模拟滑动窗口


思路分析


使用队列模拟滑动窗口,并使用一个sum记录队列内数的和,由于数的大小有别,所以这里使用while来推出队列中的数


int minSubArrayLen(int target, vector<int>& nums) {
    int ans = INT_MAX, sum = 0;
    queue<int> que;
    for (auto &n : nums) {
        sum += n;
        que.push(n);
        while (sum >= target) {
            ans > que.size() ? ans = que.size() : ans;
            sum -= que.front();
            que.pop();
        }
    }
    return ans == INT_MAX ? 0 : ans;
}


方法二:双指针


思路分析


定义两个指针i和j指针,将区间[j,i]看成滑动窗口,那么两个指针就分别表示滑动窗口的开始位置和结束位置,同时我们再维护一个sum变量用来存贮区间[j,i]连续数组的和。如果当前滑动窗口维护的区间和sum大于等于target,就说明当前的窗口是可行的,可行中的长度最短的滑动窗口就是答案


int minSubArrayLen(int target, vector<int>& nums) {
    int res = INT_MAX, sum = 0;
    for (int i = 0, j = 0; i < nums.size(); i++) {
        sum += nums[i];//向右扩展窗口
        while (sum - nums[j] >= target) {//向左收缩窗口
            sum -= nums[j++];
        } 
        if (sum >= target) {//区间更新
            res = min(res, i - j + 1);
        }
    }
    return res == INT_MAX ? 0 : res;
}


目录
相关文章
|
11月前
|
SQL 运维 前端开发
工单事项梳理工具深度分析:助力团队提高响应效率与问题闭环率的关键手段
在技术团队协作中,工单常暴露出问题重复、责任不清、缺乏复盘等短板。本文提出“工单转任务”的事项梳理机制,通过结构化拆解、可视化推进、知识沉淀等手段,提升协作效率与服务质量,适用于运维、研发、数据治理等场景。
|
12月前
|
人工智能 边缘计算 Serverless
震惊!CDN都进化到可以用MCP写游戏了吗?
《2048》是一款风靡全球的数字益智小游戏,玩家通过移动和合并相同数字完成2048即为通关。传统开发需数小时甚至数月,而使用ESA MCP Server只需1分钟“0代码”即可实现网页全球部署。ESA MCP Server是开源的Model Context Protocol服务实现,连接AI模型与边缘安全加速服务。结合阿里云边缘函数(ER),支持秒级全球节点部署,降低延迟,提升响应速度。环境搭建简单,仅需配置API密钥与插件,向AI提出需求即可快速生成并部署应用。
343 10
|
机器学习/深度学习 人工智能 开发者
【AI系统】昇思 MindSpore 关键特性
本文介绍华为自研AI框架昇思MindSpore,一个面向全场景的AI计算框架,旨在提供统一、高效、安全的平台,支持AI算法研究与生产部署。文章详细阐述了MindSpore的定位、架构、特性及在端边云全场景下的应用优势,强调其动静态图统一、联邦学习支持及高性能优化等亮点。
661 7
【AI系统】昇思 MindSpore 关键特性
|
druid Java 关系型数据库
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
1666 0
|
SQL 安全 Java
安全测试之推荐工具
【2月更文挑战第2天】安全测试之推荐工具
1565 2
|
Java Maven
ivy 配置 maven代理
Ivy 是一个依赖管理工具,直观感受是其跟maven 的作用差不多;但这两个其实是不同的工具: maven 是面向整个项目的工程管理及构建工具;ivy 仅作为依赖管理工具,与ant 高度集成。 需要了解更多不同,可看看这里:http://ant.apache.org/ivy/m2comparison.html   几年前了解到这东西,也是因为 play! 框架内置的依赖使用它进行依赖管理,但至今国内仍然以maven 作为主流依赖管理工具,看来还是先入为主的问题。
3379 0
|
存储 算法 安全
【算法】Java实现SHA算法
SHA(Secure Hash Algorithm)是一系列密码学哈希函数的集合,用于将输入数据转换为固定大小的哈希值。SHA算法由美国国家安全局(NSA)设计,并由美国国家标准与技术研究所(NIST)发布为标准。
619 0
|
Web App开发 编解码 监控
浏览器:浏览器指纹
浏览器:浏览器指纹
1129 0
|
搜索推荐 云栖大会 开发者
人人都是开发者,让数字公益更简单
以技术助力公益,让数字公益更简单。
545 0
|
XML Java 数据格式
jar包部署的三种方式
jar包部署的三种方式
2833 0