数组——209.长度最小的子数组

简介: 本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助

1 题目描述

  1. 长度最小的子数组

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

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

2 题目示例

示例 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

3 题目提示

  • 1 <= target <= 109
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

4 思路

滑动窗口
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。

首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。

如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?

解题的关键在于 窗口的起始位置如何移动
滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)暴力解法降为O(n)
所以,这个循环的索引,一定是表示 滑动窗口的终止位置。

5 我的答案

class Solution {

    // 滑动窗口
    public int minSubArrayLen(int s, int[] nums) {
        int left = 0;
        int sum = 0;
        int result = Integer.MAX_VALUE;
        for (int right = 0; right < nums.length; right++) {
            sum += nums[right];
            while (sum >= s) {
                result = Math.min(result, right - left + 1);
                sum -= nums[left++];
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}
相关文章
|
7月前
|
人工智能 Cloud Native 安全
解锁 DeepSeek 安全接入、稳定运行新路径
解锁 DeepSeek 安全接入、稳定运行新路径
|
10月前
|
存储 缓存 算法
优化轮询算法以提高资源分配的效率
【10月更文挑战第13天】通过以上这些优化措施,可以在一定程度上提高轮询算法的资源分配效率,使其更好地适应不同的应用场景和需求。但需要注意的是,优化策略的选择和实施需要根据具体情况进行详细的分析和评估,以确保优化效果的最大化。
|
人工智能 算法
一些算法的复习(最短路径、最小生成树、dp)
一些算法的复习(最短路径、最小生成树、dp)
112 0
Python类三种方法,函数传参,类与实例变量(一)
1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的‘引用’ a = 1 def func(a): a = 2 func(a) print(a) # 1 a = 1 def fun(a)...
|
架构师 安全 区块链
带你读《自主管理身份:分布式数字身份和可验证凭证》——第5章 SSI架构:大局观(1)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第5章 SSI架构:大局观(1)
带你读《自主管理身份:分布式数字身份和可验证凭证》——第5章 SSI架构:大局观(1)
|
机器学习/深度学习 算法 TensorFlow
面向计算机视觉的深度学习:1~5(4)
面向计算机视觉的深度学习:1~5(4
122 0
|
安全 关系型数据库 MySQL
java程序启动连接mysql时报错com.mysql.jdbc.exceptions.jdbc4.CommunicationsExcepti:Communications link failur
java程序启动连接mysql时报错com.mysql.jdbc.exceptions.jdbc4.CommunicationsExcepti:Communications link failur
597 0
|
弹性计算 Ubuntu Linux
对于学生来说ECS最实用的Tips
ECS对于在校学生来说,有哪些非常实际门槛低的用途。
|
C语言
【C语言】题集 of ⑦
🎉第三十一题→模拟实现strcat()函数🎉 来介绍下什么是strcat()函数,strcat() 函数的声明方式如下
191 0
|
开发框架 算法 Java
【算法千题案例】每日LeetCode打卡——93.宝石与石头
📢前言 🌲原题样例:宝石与石头 🌻C#方法:Linq解法 🌻Java 方法:暴力法 💬总结