(LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)

题目:209. 长度最小的子数组


思路:双指针,时间复杂度0(n)。

sum记录左右指针内的数组元素之和,当sum-numsleft>=target时,移动左指针。

C++版本:

cpp 复制代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n=nums.size();
        int mn=n+1;
        int sum=0;
        for(int left=0,right=0;right<n;right++){
            sum+=nums[right];
            while(sum-nums[left]>=target){
                sum-=nums[left];
                left++;
            }
            if(sum>=target){
                mn=min(mn,right-left+1);
            }
        }
        return mn==n+1 ? 0:mn;
    }
};

JAVA版本:

java 复制代码
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n=nums.length;
        int mn=n+1;
        int sum=0;
        for(int left=0,right=0;right<n;right++){
            sum+=nums[right];
            while(sum-nums[left]>=target){
                sum-=nums[left];
                left++;
            }
            if(sum>=target){
                mn=Math.min(mn,right-left+1);
            }
        }
        return mn==n+1 ? 0:mn;
    }
}

GO版本:

go 复制代码
func minSubArrayLen(target int, nums []int) int {
    n:=len(nums)
    sum,mn:=0,n+1
    for left,right:=0,0;right<n;right++ {
        sum+=nums[right]
        for sum-nums[left]>=target {
            sum-=nums[left]
            left++
        }
        if sum>=target {
            mn=min(mn,right-left+1)
        }
    }
    if mn==n+1 {
        return 0
    }
    return mn
}
相关推荐
a187927218318 分钟前
【算法】动态规划第五篇:区间 DP——从“看什么都像背包“到“最后戳谁“
算法·leetcode·动态规划·dp·区间·区间dp·算法讲解
键盘会跳舞11 分钟前
【C++多线程】thread_local 深度剖析:线程局部存储的生命周期与实现
c++·多线程·thread_local
会编程的吕洞宾11 分钟前
Spring Boot多环境配置实战 配置文件加载顺序与切换不再翻车
java·后端
whitelbwwww12 分钟前
c++ 多线程
开发语言·c++·算法
额鹅恶饿呃13 分钟前
随着CentOS官方停服的时间越来越久,大量仍在使用CentOS7的企业和运维从业者
java·python·算法·c#·ruby
秋名RG18 分钟前
Java 异常处理全攻略:从入门到实战(JDK 21 版)
java·开发语言
白狐_79818 分钟前
408 数据结构|KMP算法核心:为什么不用主串回退
数据结构·算法
努力努力再努力wz20 分钟前
【Docker入门系列】:从架构演进到容器化:一文建立 Docker、虚拟化与 Namespace 的底层心智模型
运维·开发语言·数据结构·c++·docker·容器·架构
Zenova EdgeOS21 分钟前
Go 工业边缘 Protobuf 实战:从 proto 到 Marshal 的完整落地
物联网·go·边缘计算·序列化·protobuf·工业边缘
wuyk55525 分钟前
13.堆排序:基于完全二叉树的高效排序算法一、什么是堆排序?
开发语言·算法·排序算法