当前位置: 首页 > news >正文

LeetCode209.长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

1.常规解法(会超时)

可以先将数组的所有子数组求出来,计算其中元素的值,判断与目标值的大小关系,代码如下:

    public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int len = n;boolean flag = false;for (int i = 0; i < n; i++) {int sum = 0;for (int j = i; j < n; j++) {sum += nums[j];if (sum >= target) {flag = true;len = Math.min(len, j - i + 1);break;}}}return flag ? len : 0;}

在上述代码中,使用了flag来判断是否有符合条件的子数组。

2.滑动窗口

使用该方法的前提是数组中的元素全是大于等于0的,可以使用单调性解题。

先定义两个指针left和right,这两个指针均指向第一个元素;

先让right向右移动,并用sum加上right指向的元素,当sum>=target时,可以求出符合条件的子数组的长度,这时可以让left向右移动,用sum减去left指向的元素,根据单调性,sum会越减越小,当sum<target时,left停止移动,继续上面的操作,当right指向数组外面时,最后的len就是结果。

流程图与代码如下:

    public int minSubArrayLen(int target, int[] nums) {int n = nums.length;int len = Integer.MAX_VALUE;int sum = 0;for (int left = 0, right = 0; right < n; right++) {sum += nums[right];while (sum >= target) {len = Math.min(len, right - left + 1);sum -= nums[left++];}}return len == Integer.MAX_VALUE ? 0 : len;}

 希望读者给出建议!


http://www.mrgr.cn/news/50906.html

相关文章:

  • PMP敏捷专题课:敏捷原则与理念
  • 使用OpenCV实现基于FisherFaces的人脸识别
  • 【数据结构】:破译排序算法--数字世界的秩序密码(二)
  • 腾讯云视立方·直播 SDK 合规使用指南
  • linux运行openfoam并行会报错:attempt to run parallel on 1 processor
  • 使用OpenCV实现基于EigenFaces的人脸识别
  • IPV6学习汇总
  • AI LLM 利器 Ollama 架构和对话处理流程解析
  • RAG 入门实践:从文档拆分到向量数据库与问答构建
  • 【论文速看】DL最新进展20241015-目标检测、图像超分
  • DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记
  • 四、【智能体】RGA架构、工作流程以及关键组件
  • 音视频入门基础:H.264专题(20)——FFmpeg源码中,解码AVCDecoderConfigurationRecord的实现
  • OpenAI的Swarm是一个实验性质的多智能体编排框架
  • 内核定时器API实现点灯
  • 工具方法 - 可选的一些AI聊天机器人
  • 本地流量配合美容院打法及生财合伙人推荐
  • Vulnhub:Me-and-My-Girlfriend-1
  • `concurrent.futures` 是 Python 标准库中的一个模块
  • MySQL 安装和基本使用