找到最短的连续子数组的和至少为k

维护前缀和b,那么要我们要找的就是满足b[i] - b[j] >=k 的最大的j是多少,朴素的实现的话复杂度是O(N^2)的

注意到如果前缀和b[x] >= b[y](x < y)的话,那么x永远不可能成为解,因为这个时候如果x满足 b[i] - b[x] >= k的话,

那么j也一定满足b[i] - b[y] >= k,并且y和i组成的数组要比x和i组成的数组更短

因此候选的解一定是一定(严格)单调上升的序列,我们可以用一个双端队列来实现

具体的话

每次入队的时候,如果当前和比队尾的和大,就一直出队

寻找解的时候,从队首一直向后找,找到最大的下标即可,之前的就可以出队了,因为他们后面也不可能成为更优的解了。

每个下标最多都只会进队和出队一次,复杂度是O(N)

    public int shortestSubarray(int[] A, int K) {//单调队列,维护前缀和B[], 如果 B[i] >= B[j], 那么i永远不可能成为最有解int len = A.length;int[] b = new int[len + 1];for (int i = 1; i <= len; i++) b[i] = b[i - 1] + A[i - 1];int res = Integer.MAX_VALUE;//d是一个双端队列,维护的是b数组的下标Deque<Integer> d = new ArrayDeque<>();d.add(0);for (int i = 1; i <= len; i++) {while (!d.isEmpty() && b[i] - b[d.getFirst()] >= K) {res = Math.min(res, i - d.getFirst());d.pollFirst();}//根据上述的性质,队列维护的前缀和一定是一个(严格)单调上升的while (!d.isEmpty() && b[i] <= b[d.getLast()]) {d.pollLast();}d.add(i);}return res == Integer.MAX_VALUE ? -1 : res;}

Leetcode 862相关推荐

  1. ⭐算法入门⭐《队列 - 单调队列》困难03 —— LeetCode 862. 和至少为 K 的最短子数组

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   返回数组 AAA 的最 ...

  2. LeetCode 862. 和至少为 K 的最短子数组(前缀和+deque单调栈)

    1. 题目 返回 A 的最短的非空连续子数组的长度,该子数组的和至少为 K . 如果没有和至少为 K 的非空子数组,返回 -1 . 示例 1: 输入:A = [1], K = 1 输出:1示例 2: ...

  3. LeetCode 862 题解

    https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/description/ 题目大意:求满足数组内,连续和至少为K ...

  4. LeetCode 974. 和可被 K 整除的子数组(哈希map)

    1. 题目 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满 ...

  5. LeetCode 560. 和为K的子数组(前缀和差分)

    1. 题目 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1 ...

  6. LeetCode 523. 连续的子数组和(求余 哈希)

    1. 题目 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示例 1: 输入 ...

  7. 2020云栖大会编程限时抢答赛 - 早中晚3场题解

    文章目录 1. 云栖大会限时抢答赛 - 早间场 2. 云栖大会限时抢答赛 - 午间场 3. 云栖大会限时抢答赛 - 晚间场 1. 云栖大会限时抢答赛 - 早间场 题目链接 该场次题目在 LeetCod ...

  8. 算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记

    算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记 前言 单调队列 场景举例(RMQ) 应用-维护区间最值的方式 数据结构-自行设计单调队列 代码实现(java) 例题分析(略) 总 ...

  9. taoqick 搜索自己CSDN博客

    L1 L2正则化和优化器的weight_decay参数 kaiming初始化的推导 Pytorch动态计算图 Pytorch自动微分机制 PyTorch中在反向传播前为什么要手动将梯度清零? 通俗讲解 ...

最新文章

  1. Oracle用户被锁定解决方法
  2. [原译]11个高效的VS调试技巧
  3. 什么是7层负载均衡?
  4. 获取当前文件所在路径
  5. mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
  6. Ubuntu安装C++环境(VsCode 编译器)
  7. 深入浅出MySql索引
  8. linux内核无锁cas,无锁编程以及CAS
  9. 被收割的人,是拦不住的
  10. mac php pear pecl,mac 安装 pecl pear
  11. Learning through Auxiliary Tasks——辅助任务学习or自监督学习中的pretext
  12. JAVA+MySQL 图书馆借阅信息管理系统
  13. [1-3] 把时间当做朋友(李笑来)Chapter 3 【提高心智,和时间做朋友】 摘录
  14. x264参数与代码对应
  15. 抓包工具以及如何看抓包信息
  16. 硅谷始祖-仙童半导体浮沉录
  17. Android视频编辑SDK--RDVECore来自锐动的无UI,高度抽象化API
  18. OneDrive和OneDrive for Business映射到本地网络驱动器
  19. 开票系统OFD如何转换PDF格式
  20. 前端制作简单的“注册页面——阅读协议”页面及效果

热门文章

  1. 三角形主机即将登陆韩国市场
  2. 日常办公提升效率软件(chrome插件、Octave、BOINC、FLIQLO)
  3. python输出0到50间的偶数_python奇数偶数行输出_python对输出的奇数偶数排序实例代码...
  4. Java不死神兔案例
  5. npm 不是内部命令
  6. 关于微信小程序的搭建
  7. 买无人机之前你需要知道的几件事
  8. 视频号美食博主头部账号的案例分析。美食账号可以做哪些类型的内容?国仁楠哥
  9. 计算机专业是什么学科门类,介绍下软件工程属于什么学科类别
  10. 如何快速批量将视频转换格式mp4