题目描述

这是 LeetCode 上的 209. 长度最小的子数组 ,难度为 中等

Tag : 「前缀和」、「二分」

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其和 ≥ target 的长度最小的 连续子数组  ,并返回其长度。如果不存在符合条件的子数组,返回 。

示例 1:

输入:target = 7, nums = [2,3,1,2,4,3]

输出:2

解释:子数组 [4,3] 是该条件下的长度最小的子数组。

示例 2:

输入:target = 4, nums = [1,4,4]

输出:1

示例 3:

输入:target = 11, nums = [1,1,1,1,1,1,1,1]

输出:0

提示:

前缀和 + 二分

利用 的数据范围为 ,可知前缀和数组满足「单调递增」。

我们先预处理出前缀和数组 sum(前缀和数组下标默认从 开始),对于每个 而言,假设其对应的前缀和值为 ,我们将 视为子数组的右端点,问题转换为:在前缀和数组下标 范围内找到满足 值小于等于 的最大下标,充当子数组左端点的前一个值。

利用前缀和数组的「单调递增」(即具有二段性),该操作可使用「二分」来做。

代码:

class Solution {    public int minSubArrayLen(int t, int[] nums) {        int n = nums.length, ans = n + 10;        int[] sum = new int[n + 10];        for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + nums[i - 1];        for (int i = 1; i <= n; i++) {            int s = sum[i], d = s - t;            int l = 0, r = i;            while (l < r) {                int mid = l + r + 1 >> 1;                if (sum[mid] <= d) l = mid;                else r = mid - 1;            }            if (sum[r] <= d) ans = Math.min(ans, i - r);        }        return ans == n + 10 ? 0 : ans;    }}
  • 时间复杂度:预处理前缀和数组的复杂度为 ,遍历前缀和数组统计答案复杂度为 。整体复杂度为
  • 空间复杂度:

最后

这是我们「刷穿 LeetCode」系列文章的第 No.209 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。

在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。

为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。

在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。


本文由 mdnice 多平台发布

【宫水三叶的刷题日记】209. 长度最小的子数组(中等)相关推荐

  1. 【宫水三叶的刷题日记】961. 在长度 2N 的数组中找出重复 N 次的元素

    题目描述 这是 LeetCode 上的 961. 在长度 2N 的数组中找出重复 N 次的元素 ,难度为 简单. Tag : 「模拟」.「计数」.「构造」.「哈希表」 给你一个整数数组 nums ,该 ...

  2. 【宫水三叶的刷题日记】1022. 从根到叶的二进制数之和

    题目描述 这是 LeetCode 上的 1022. 从根到叶的二进制数之和 ,难度为 简单. Tag : 「DFS」.「BFS」.「二叉树」.「树的遍历」 给出一棵二叉树,其上每个结点的值都是   或 ...

  3. 【宫水三叶的刷题日记】1037. 有效的回旋镖(简单)

    题目描述 这是 LeetCode 上的 1037. 有效的回旋镖 ,难度为 简单. Tag : 「计算几何」.「数学」 给定一个数组 points,其中   表示 X-Y 平面上的一个点,如果这些点构 ...

  4. 【宫水三叶的刷题日记】497. 非重叠矩形中的随机点(中等)

    题目描述 这是 LeetCode 上的 497. 非重叠矩形中的随机点 ,难度为 中等. Tag : 「前缀和」.「二分」.「随机化」 给定一个由非重叠的轴对齐矩形的数组 rects,其中 表示 是第 ...

  5. 【宫水三叶的刷题日记】732. 我的日程安排表 III

    题目描述 这是 LeetCode 上的 「732. 我的日程安排表 III」 ,难度为 「困难」. Tag : 「线段树(动态开点)」.「分块」.「线段树」 当 个日程安排有一些时间上的交叉时(例如 ...

  6. 【宫水三叶的刷题日记】715. Range 模块

    题目描述 这是 LeetCode 上的 715. Range 模块 ,难度为 困难. Tag : 「线段树」.「线段树(动态开点)」 Range 模块是跟踪数字范围的模块.设计一个数据结构来跟踪表示为 ...

  7. 【宫水三叶的刷题日记】730. 统计不同回文子序列(困难)

    题目描述 这是 LeetCode 上的 730. 统计不同回文子序列 ,难度为 困难. Tag : 「区间 DP」.「动态规划」 给定一个字符串 s,返回 s 中不同的非空「回文子序列」个数 . 通过 ...

  8. 【宫水三叶的刷题日记】508. 出现次数最多的子树元素和

    题目描述 这是 LeetCode 上的 508. 出现次数最多的子树元素和 ,难度为 中等. Tag : 「树的遍历」.「DFS」.「哈希表」 给你一个二叉树的根结点 root,请返回出现次数最多的子 ...

  9. 【宫水三叶的刷题日记】468. 验证IP地址

    题目描述 这是 LeetCode 上的 468. 验证IP地址 ,难度为 中等. Tag : 「模拟」.「双指针」 给定一个字符串 queryIP.如果是有效的 IPv4 地址,返回 "IP ...

最新文章

  1. PrestaShop 网站后台配置(三)
  2. hp designiet 500_2020年HP学院壁纸
  3. 前端学习(1612):oracle简介
  4. 聊聊Spring Cloud版本的那些事儿
  5. vue和java bean_Java:JavaBean和BeanUtils
  6. 时间格式 asp.net
  7. 实习踩坑之路:Mybatis写的sql语句有<符号的问题导致项目启动失败以及count(*)怎么对应到某个实体类的字段
  8. 《那些年啊,那些事——一个程序员的奋斗史》三
  9. ibm arm-linux,CentOS Linux 7.5 (build 1804) 现可用于IBM POWER9体系结构
  10. C++语言的表达式模板:表达式模板的入门性介绍
  11. 努比亚 Z17s (Nubia NX595J) 解锁BootLoader 并刷入recovery ROOT
  12. 研究遭质疑!Jeff Dean回应:我们本就不是为得到新SOTA,成本计算也搞错了...
  13. 美国卡内基梅隆大学计算机科学生源质量,卡内基梅隆大学2020新生数据,计算机学院录取率堪比藤校!...
  14. spring和jump区别_JUMP与 SKIP 的区别
  15. rrd文件导入mysql_RRDtool 系列连载-5 :查询 RRD 数据库信息
  16. 关键词百度指数叠加-关键词百度指数叠加
  17. 基于FPGA的图像浮雕效果实现
  18. 你的声音价值百万,教你六个利用声音赚钱的方法
  19. 墨水屏(电子纸)的介绍与使用(附STM32程序~~~)
  20. ubuntu12.04宽带链接 以及 宽带链接后 再上局域网时出现的问题

热门文章

  1. SQL中数据操作语言 (DML) 和数据定义语言 (DDL)
  2. |●梯度下降是什么|●梯度下降算法原理|●梯度下降实例
  3. 软 RAID 工具 mdadm
  4. 多智能体强化学习入门(八)——图卷积强化学习DGN
  5. 2019年深思杯部分解题思路
  6. 客户案例 | 拥抱人工智能,低代码智能化电商管理
  7. SpringBoot系列之Hikari连接池
  8. 【前端】vue运行环境和编辑器VScode安装
  9. 【毕业设计】深度学习 opencv python 实现中国交通标志识别
  10. 电动牙刷博弈:素士、Usmile们合纵连横