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

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


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

sum记录左右指针内的数组元素之和,当sum-nums[left]>=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
}
相关推荐
551只玄猫1 分钟前
KNN算法基础 机器学习基础1 python人工智能
人工智能·python·算法·机器学习·机器学习算法·knn·knn算法
charliejohn1 分钟前
计算机考研 408 数据结构 哈夫曼
数据结构·考研·算法
POLITE39 分钟前
Leetcode 41.缺失的第一个正数 JavaScript (Day 7)
javascript·算法·leetcode
Filotimo_20 分钟前
EntityGraph的概念
java·开发语言·数据库·oracle
wregjru21 分钟前
【读书笔记】Effective C++ 条款1~2 核心编程准则
java·开发语言·c++
CodeAmaz23 分钟前
一致性哈希与Redis哈希槽详解
redis·算法·哈希算法
heartbeat..1 小时前
Servlet 全面解析(JavaWeb 核心)
java·网络·后端·servlet
vx_bisheyuange1 小时前
基于SpringBoot的疗养院管理系统
java·spring boot·后端