和大于S的最小子数组 · Minimum Size Subarray Sum

本文介绍了解决寻找数组中和≥s的最小长度子数组的问题,采用双指针法实现高效求解,通过boy追逐girl的类比来阐述解题思路,并提供了一段完整的Java代码示例。

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

[抄题]:

给定一个由 n 个正整数组成的数组和一个正整数 s ,请找出该数组中满足其和 ≥ s 的最小长度子数组。如果无解,则返回 -1。

给定数组 [2,3,1,2,4,3] 和 s = 7, 子数组 [4,3] 是该条件下的最小长度子数组。

 [暴力解法]:

时间分析:

空间分析:

[思维问题]:

  1. 和 ≥ s 的最小长度子数组,和《s时j++,达到后更新j-i。再扫更大,所以此处打止。(j不用回去,否则会变成原来的i)
  2. 时,初始化为Integer.MAX_VALUE,忘了。

[一句话思路]:

长度不确定的窗口:boy追逐girl, girl在boy的循环中发生先量变、再质变

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

[二刷]:

[三刷]:

[四刷]:

[五刷]:

  [五分钟肉眼debug的结果]:

[总结]:

长度不确定的窗口:boy追逐girl, girl在boy的循环中发生先量变、再质变

[复杂度]:Time complexity: O(2n) Space complexity: O(n)

boy 一共走n, girl一共也走只n,而不是每次都跟着 。同时并行而不是嵌套,故为2n

[英文数据结构或算法,为什么不用别的数据结构或算法]:

[关键模板化代码]:

[其他解法]:

[Follow Up]:

[LC给出的题目变变变]:

718. Maximum Length of Repeated Subarray dp这么麻烦的吗

 [代码风格] :

 

public class Solution {
    /**
     * @param nums: an array of integers
     * @param s: An integer
     * @return: an integer representing the minimum size of subarray
     */
    public int minSubArrayLen(int s, int[] nums) {
        //corner case
        if (nums == null || s <= 0) {
            return -1;
        }
        //i,j in same dir
        int i = 0, j = 0;
        int sum = 0;
        int ans = Integer.MAX_VALUE;
        for (i = 0; i < nums.length; i++) {
            //accumulate
            while (j < nums.length && sum < s) {
                sum += nums[j];
                j++;
            }
            //change
            if (sum >= s) {
                    ans = Math.min(ans, j - i);
                }
            //boy should go back
            sum -= nums[i];
        }
        //if no result
        if (ans == Integer.MAX_VALUE) {
            return -1;
        }
        
        return ans;
    }
}
View Code

 

转载于:https://www.cnblogs.com/immiao0319/p/8503790.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值