[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;
    }
}
相关推荐
m0_587383005 分钟前
无人自助拼豆系统核心功能开发与部署落地全流程实战指南
java·经验分享·后端·struts·架构
碧海银沙音频科技研究院11 分钟前
基于炬芯ATS308X的LE aduio LC3编解码算法功能实现
算法
小蒋观天下13 分钟前
厂区人员徘徊游荡判别——基于时序轨迹速度的逗留行为分级算法落地
大数据·人工智能·深度学习·算法·机器学习·ai大模型
雷一言说14 分钟前
Spring AI 2.0:RAG 文档分块大小策略选择
java·spring
XIAEE15 分钟前
Java 世界历险记:从一行 System.out.println 到整个 Spring 宇宙
java·spring
XIAEE17 分钟前
微前端狂想曲:我试图让三个不同门派的前端住进同一栋楼
java·spring
XIAEE17 分钟前
Linux 生存指南:从"终端恐惧症"到"命令行老司机"
java·spring
XIAEE18 分钟前
实战教程:手机端死活调不出摄像头?聊聊安全上下文(Secure Context)
java·spring
程序员清风18 分钟前
堆与优先队列:从 Top K 到任务调度
java·数据结构·算法
shaibdoio18 分钟前
瞬维AI技术拆解:AI获客智能体的双层漏斗算法原理
大数据·人工智能·算法