209 长度最小的子数组(双指针)
1. 问题描述:
给定一个含有 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 <= 10 ^ 9
1 <= nums.length <= 10 ^ 5
1 <= nums[i] <= 10 ^ 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum
2. 思路分析:
因为求解的是一个区间的和,所以考虑一下是否可以使用双指针算法(滑动窗口属于特殊的双指针算法),考虑当前的区间[j, i],当i往右走的时候也即下图中的i'位置,这个时候考虑左端点j在j的左边还是右边,因为i往右走的时候数组元素都是大于0的所以和是递增的,当区间[j, i]超过了s之后那么j肯定是往右走的,这个时候区间和才会减小,所以j'应该在右边,所以可以左边的指针j是随着右边的指针i单调的,也即同一个方向移动所以可以使用双指针算法,时间复杂度为0(n)。
3. 代码如下:
from typing import List
import sysclass Solution:def minSubArrayLen(self, target: int, nums: List[int]) -> int:i, j = 0, 0s = 0res = sys.maxsizewhile i < len(nums):s += nums[i]while s - nums[j] >= target:s -= nums[j]j += 1if s >= target: res = min(res, i - j + 1)i += 1if res == sys.maxsize: res = 0return res
209 长度最小的子数组(双指针)相关推荐
- LeetCode 209. 长度最小的子数组(双指针+滑动窗口)
题目描述 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums ...
- 209. 长度最小的子数组(中等 数组 滑动窗口)
209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, -, n ...
- 代码随想录算法训练营第二天|LeetCode 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II
LeetCode 977.有序数组的平方 题目链接:977.有序数组的平方 思路: 1.先对每个数进行遍历平方,并插入新的容器中 2.对容器进行排序,返回就可以了 缺陷:开辟了新的容器空间 class ...
- 【宫水三叶的刷题日记】209. 长度最小的子数组(中等)
题目描述 这是 LeetCode 上的 209. 长度最小的子数组 ,难度为 中等. Tag : 「前缀和」.「二分」 给定一个含有 n 个正整数的数组和一个正整数 target. 找出该数组中满足其 ...
- LeetCode 209. 长度最小的子数组 (滑动窗口)
LeetCode 209. 长度最小的子数组 class Solution {public int minSubArrayLen(int s, int[] nums) {int start = 0;i ...
- 代码随想录算法训练营第二天 | LeetCode977有序数组的平方 、209长度最小的子数组、 59.螺旋矩阵II
--------------------------- 977.有序数组的平方 #include <iostream> #include <algorithm> #includ ...
- 10. Leetcode 209. 长度最小的子数组 (数组-同向双指针-滑动窗口)
给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr ...
- Leetcode 209. 长度最小的子数组 解题思路及C++实现
解题思路: 定义两个指针 left 和 right,构成一个滑动窗口,当窗口内的数值和小于 s 时,右指针向右滑动,当窗口内的数值和大于等于 s 时,就要更新一次 子数组的最小长度了.同时 左指针向右 ...
- LeetCode 209. 长度最小的子数组(滑动窗口)
1. 题目 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组. 如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, num ...
最新文章
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
- 洛谷 - P4768 [NOI2018]归程(Kruskal重构树+树上倍增+最短路)
- TCP为什么需要三次握手和四次挥手
- 处理字符集中的算式问题
- linux 如何产生so文件,printf()函数 【转】Linux下gcc编译生成动态链接库*.so文件并调用它(2)...
- andriod手机客户端自动化测试工具整理
- VIO,visual-inertial odometry)即视觉惯性里程计
- 2011QQ搞笑个性签名:小弟不才,大名耶稣.小名上帝.法号如来
- Groupon新变种 LevelUp:折价券
- h61 nvme硬盘_谁更快?PCIe 4.0时代的NVMe固态硬盘性能对决
- pythoncookie自动登录_Python爬虫连载6-cookie深入使用实例化实现自动登录
- Mac下brew及brew-cask安装使用
- 去掉UUID的小横线,如果你觉得不爽的话,哈哈
- OPENAPI3.0 与 SpringBoot 开发实战: 新型高效开发模式,实现代码与API分离,高效开发,开发必看!!!
- 安装RabbitVCS
- android7程序自启动管理在哪,开机启动管理最新版-开机启动管理软件下载v3.7.1 安卓版-腾牛安卓网...
- TortoiseGit 配置密钥 ppk
- sdr 收听广播_产品管理的50个最佳阅读,收听和观看资源
- [Algorithmic Toolbox学习笔记][week6]0/1 Knapsack Problem
- java perl 正则表达式_java 风格的正则表达式 vs Perl风格的正则表达式