当前位置:网站首页>【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
边栏推荐
- Unity获取canvas 下ui 在屏幕中的实际坐标
- 京东云发布新一代分布式数据库StarDB 5.0
- 力扣解法汇总899-有序队列
- Postgresql源码(64)查询执行——子模块Executor(2)执行前的数据结构和执行过程
- U-Net生物医学图像分割讲解(Convolutional Networks for BiomedicalImage Segmentation)
- Jingdong cloud released a new generation of distributed database StarDB 5.0
- APT级全面免杀与企业纵深防御体系的红蓝对抗
- ADS 2023 下载链接
- 友宏医疗与Actxa签署Pre-M Diabetes TM 战略合作协议
- unity3d-游戏物体控制方法
猜你喜欢
随机推荐
Web项目中简单使用线程池
Postgresql快照优化Globalvis新体系分析(性能大幅增强)
网络协议-TCP、UDP区别及TCP三次握手、四次挥手
Climbing Stairs (7/30)
Jingdong cloud released a new generation of distributed database StarDB 5.0
阿里巴巴政委体系-第七章、阿里政委培育
微信小程序分享功能
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
Postgresql snapshot optimization Globalvis new system analysis (performance greatly enhanced)
if/else或switch替换为Enum
pytest接口自动化测试框架 | 基于Pytest的Web UI自动化测试框架介绍
线上一次JVM FullGC搞得整晚都没睡,彻底崩溃
软件测试回归案例,什么是回归测试?
Postgresql source code (64) Query execution - data structure and execution process before submodule Executor (2) execution
盲僧发现了华点——教你如何使用API接口获取数据
LeetCode 952. 按公因数计算最大组件大小
ECCV 2022 Oral | 满分论文!视频实例分割新SOTA: IDOL
群辉查看硬盘存储占用的方式
盘点在线帮助中心对企业能够起到的作用
怎么将自己新文章自动推送给自己的粉丝(巨简单,学不会来打我)