[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;
    }
}
相关推荐
苏生Susheng10 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
想要成为老金高手10 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes
吴长建先生重名了10 小时前
ElasticSearch 检索系统性能优化实战:基准测试
java
西索斯coding10 小时前
doubao-seed-2.1-turbo 调用一直 401 怎么办?pro 版同样的 Key 却正常——5 分钟排查定位指南
java·服务器·数据库·ai
旧梦952710 小时前
Java SortedMap 接口详解:从入门到实战
java·开发语言
莫陌尛.10 小时前
Java_this构造方法
java·开发语言
2601_9622972510 小时前
C# vs Java vs Python:YOLO工业部署性能对比实战
java·python·c·工业视觉·性能对比
计算机毕设定制辅导-无忧学长10 小时前
《基于SpringBoot的马术俱乐部管理系统》
java·spring boot·后端
Dreams°12310 小时前
【Java后端+Vue前后端分离:内网正常、公网访问异常|5个高频经典踩坑完整复盘】
java·开发语言·vue.js
Omics Pro11 小时前
Arc研究所Cell|全新虚拟细胞官方基准评测框架
大数据·人工智能·深度学习·算法·机器学习