当前位置:网站首页>【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
【leetcode】剑指 Offer II 008. 和大于等于 target 的最短子数组(滑动窗口,双指针)
2022-08-03 19:24:00 【friedrichor】
剑指 Offer II 008. 和大于等于 target 的最短子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [ n u m s l , n u m s l + 1 , . . . , n u m s r − 1 , n u m s r ] [nums_l, nums_{l+1}, ..., nums_{r-1}, nums_r] [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 < = t a r g e t < = 1 0 9 1 <= target <= 10^9 1<=target<=109
- 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
- 1 < = n u m s [ i ] < = 1 0 5 1 <= nums[i] <= 10^5 1<=nums[i]<=105
题解
滑动窗口
最简单的滑动窗口,不过这个超时了。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
for window_size in range(1, len(nums) + 1):
for i in range(len(nums) + 1 - window_size):
sum_window = sum(nums[i: i + window_size])
if sum_window >= target:
return window_size
return 0
改进(双指针):
双指针left,right
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left = 0
sum_window = 0
min_len = 1e5 + 1
for right, value in enumerate(nums):
sum_window += value
while sum_window >= target:
min_len = min(min_len, right - left + 1)
sum_window -= nums[left]
left += 1
return min_len if min_len <= 1e5 else 0
以 target = 7, nums = [2,3,1,2,4,3] 为例:
[2] 3 1 2 4 3 sum_window < target
[2 3] 1 2 4 3 sum_window < target
[2 3 1] 2 4 3 sum_window < target
[2 3 1 2] 4 3 sum_window >= target, min_len = 4
2 [3 1 2] 4 3 sum_window < target
2 [3 1 2 4] 3 sum_window >= target, min_len = 4
2 3 [1 2 4] 3 sum_window >= target, min_len = 3
2 3 1 [2 4] 3 sum_window < target
2 3 1 [2 4 3] sum_window >= target, min_len = 3
2 3 1 2 [4 3] sum_window >= target, min_len = 2
2 3 1 2 4 [3] sum_window < target

边栏推荐
- 软件测试技术之如何编写测试用例(3)
- 2022年最新的Android面试大厂必考174题(附带详细答案)
- 阿里巴巴政委体系-第七章、阿里政委培育
- LOL英雄联盟卡顿掉帧问题解决办法 2022年8月1日
- X86函数调用模型分析
- Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
- Solution for no navigation bar after Word is saved as PDF
- unity3d-游戏物体控制方法
- 从文本匹配到语义相关——新闻相似度计算的一般思路
- MySQL详细学习教程(建议收藏)
猜你喜欢
随机推荐
利用net-snmp的库实现snmpget,snmpset
The effective square of the test (one question of the day 7/29)
LOL英雄联盟卡顿掉帧问题解决办法 2022年8月1日
软件测试技术之如何编写测试用例(3)
Redis 内存满了怎么办?这样置才正确!
FreeRTOS中级篇
盲僧发现了华点——教你如何使用API接口获取数据
余弦距离介绍
按需视觉识别:愿景和初步方案
unity3d-游戏物体控制方法
Compose原理-compose中是如何实现事件分法的
Postgresql source code (64) Query execution - data structure and execution process before submodule Executor (2) execution
Reveal how the five operational management level of hundreds of millions of easily flow system
开发即时通讯到底需要什么样的技术,需要多久的时间
金鱼哥RHCA回忆录:CL210管理计算资源--管理计算节点+章节实验
CS kill-free pose
2022年最新的Android面试大厂必考174题(附带详细答案)
MySQL【变量、流程控制与游标】
ADS 2023 Download Link
建模该从哪一步开始?给你分析,给零基础的你一些学习建议








