leetcode 209. Minimum Size Subarray Sum

本文探讨了一种寻找具有最小长度且其元素总和大于或等于给定值s的连续子数组的方法。通过两种不同的实现方式对比,一种为O(n^2)的时间复杂度,另一种采用双指针技术实现更高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

For example, given the array [2,3,1,2,4,3] and s = 7,
the subarray [4,3] has the minimal length under the problem constraint.


o(n^2)的做法,但是时间到了812ms,时间框里都找不到了。。。

public class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        if(nums==null || nums.length==0) return 0;
        int len = nums.length;
        int[] sum = new int[len+1];
        for(int i=0; i<len; i++) sum[i+1] = sum[i] + nums[i];
        if(sum[len]<s) return 0;
        
        int ans = Integer.MAX_VALUE;
        for(int i=0; i<len; i++){
            for(int j=i+1; j<=len; j++){
                if(sum[j]-sum[i]>=s){
                    if(j-i<ans){
                        ans = j-i;
                        break;
                    }
                }
            }
        }
        return ans;
    }
}

别人的做法,用了两个指针的做法

public int minSubArrayLen(int s, int[] a) {
  if (a == null || a.length == 0)
    return 0;
  
  int i = 0, j = 0, sum = 0, min = Integer.MAX_VALUE;
  
  while (j < a.length) {
    sum += a[j++];
    
    while (sum >= s) {
      min = Math.min(min, j - i);
      sum -= a[i++];
    }
  }
  
  return min == Integer.MAX_VALUE ? 0 : min;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值