[Java][Leetcode middle] 209. 长度最小的子数组

暴力法

会超时

管解1:前缀和 + 二分查找

o NlogN

计算前缀和是为了便捷计算i,j之间的元素和(sumsj - sumsi

java 复制代码
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
          // 前缀和、二分查找
          int n = nums.length;

          int res = Integer.MAX_VALUE;

          // 计算前缀和
          int[] sums = new int[n+1];
          for(int i=1;i<=n;i++){
             sums[i] = sums[i-1] + nums[i-1];
          }

          //  sums[j] -  sums[i] >= s
          for(int i=1; i<=n; i++){
              int j = target + sums[i-1];
              int bound = Arrays.binarySearch(sums, j);
              
              // 如果无法找到,返回 -(插入点)-1
              if(bound < 0){
                 bound = - bound - 1;
              }

              if(bound <= n){
                  res = Math.min(res, bound - (i  - 1) );
              }
          }
      return res == Integer.MAX_VALUE ? 0 : res;
    }
}

管解2:滑动窗口

o N

设置一个滑动窗口:

  • 首先开始时,start、end都指向第一个元素
  • 开始增加end,直到>=target, 满足条件,记录最小结果
  • 逐步增加start(缩短窗口),如果满足条件>=target,继续记录比较最小结果。
java 复制代码
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length;
        if(n == 0) return 0;
        int res = Integer.MAX_VALUE;

        int start = 0,end = 0;
        int sum = 0;
        while( end < n){
            sum += nums[end];

            while(sum >= target){
                res = Math.min(res, end - start + 1);

                sum -= nums[start];
                start++;
            }

            end++;
        }

        return res == Integer.MAX_VALUE ? 0 : res;
    }
}
相关推荐
曾阿伦5 小时前
Maven 构建工程化指南
java·maven
宠友信息5 小时前
从重复请求到订单同步看内容社区源码的处理思路
java·spring boot·redis·后端·mysql·spring
带刺的坐椅5 小时前
用 Solon TeamAgent 落地供应链异常管理与自动补货
java·ai·llm·agent·solon·供应链
DFT计算杂谈5 小时前
DeepSeek 集群服务器无root本地部署指南
数据库·人工智能·python·opencv·算法
潇凝子潇5 小时前
UnsupportedOperationException
java·前端·数据库
qq_454245035 小时前
GraphFoundation — 通用图基础框架
算法·架构
qq_33776320196 小时前
国际期货资管系统开发方案|内外盘交易平台源码授权与二次开发支持
java·c语言·开发语言·c++·c#
不定积分要+C_yyy6 小时前
Java关键字final三种用法、核心特性与高频易错点
java·开发语言
不一样的故事1266 小时前
军工行业合规与基础认知
数据结构·经验分享·算法
xexpertS7 小时前
队列积压治理:如何避免异步系统出现难以恢复的消息积压
java·开发语言