https://leetcode.com/problems/shortest-subarray-with-sum-at-least-k/description/

题目大意:求满足数组内,连续和至少为K的一个序列,使得这个序列最短,求最短的长度。

解题思路:P[x]表示数列的前缀和,考虑点 x1 ,x2 若 x1<x2 ,且P[x1]>=p[x2],那么选择x2肯定来的比x1短;

考虑y1<y2,若 满足 y1 ,y2都是x点,那么y1肯定比y2好。

维护一个双端队列,每次入队前 和 尾端的P[x]比较,若比原来的小则弹出原来的值;

和队首比较,若满足差值至少为K,则将队首的值出列。

class Solution {public int shortestSubarray(int[] A, int K) {int n = A.length;long[] p = new long[n+1];for(int i=0;i<n;i++)p[i+1] = (A[i] + p[i]);Deque<Integer> qt = new LinkedList<>();int res = n +1;for(int i=0;i<=n;i++){System.out.println(p[i]);while(!qt.isEmpty() && p[i]<=p[qt.getLast()]) {
//                System.out.println("!"+" "+p[qt.getLast()]);qt.removeLast();}while(!qt.isEmpty() && p[i]>=p[qt.getFirst()]+K) {
//                System.out.println("!"+" "+p[qt.getFirst()]);res = Math.min(res, i - qt.removeFirst());
//                System.out.println(qt.getFirst()+" "+p[qt.getFirst()]);}qt.addLast(i);}return (res==n+1)?-1:res;}
}

LeetCode 862 题解相关推荐

  1. LeetCode/LintCode 题解丨一周爆刷字符串:URL 编码

    描述 给出一个代表网址 host 的字符串 base_url,和代表查询参数的列表 query_params_list,你需要返回带查询参数的完整 URL. 查询参数列表由一些包含两个元素的数组组成, ...

  2. LeetCode/LintCode 题解丨一周爆刷双指针:最小范围

    描述 有k个升序排列的数组,寻找一个最小范围,使每个数组中至少有一个元素被包含. 范围[a,b]比范围[c,d]小,当且仅当b-a < d-c,或是a < c且b-a == d-c. 给定 ...

  3. LeetCode/LintCode 题解丨一周爆刷字符串:简化路径

    描述 给定一个文件的绝对路径(Unix-style),请进行路径简化. Unix中, . 表示当前目录, - 表示父目录. 结果必须以 / 开头,并且两个目录名之间有且只有一个 /.最后一个目录名(如 ...

  4. LeetCode/LintCode 题解丨一周爆刷字符串:神奇字符串

    描述 一个神奇字符串S仅包含'1'和'2',并遵守以下规则: 字符串S是神奇的,因为连接字符'1'和'2'的连续出现次数会产生字符串S本身. 字符串S的前几个元素如下:S = "122112 ...

  5. LeetCode/LintCode 题解丨一周爆刷双指针:神奇字符串

    描述 一个神奇字符串S仅包含'1'和'2',并遵守以下规则: 字符串S是神奇的,因为连接字符'1'和'2'的连续出现次数会产生字符串S本身. 字符串S的前几个元素如下:S = "122112 ...

  6. LeetCode/LintCode 题解丨一周爆刷字符串:乱序字符串

    描述 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram). 如果一个字符串是乱序字符串,那么他存在一个字母集合相同. 但顺序不同的字符串也在S中. 所有的字符串都只包含小写字母. 点击查 ...

  7. LeetCode/LintCode 题解丨一周爆刷字符串:旋转字符数组

    描述 给定一个字符数组 s 和一个偏移量,根据偏移量原地旋转字符数组(从左向右旋转). offset >= 0 s 的长度 >= 0 原地旋转意味着需要在函数中更改字符数组 s.你不需要返 ...

  8. LeetCode/LintCode 题解丨一周爆刷双指针: 两数之和

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  9. LeetCode/LintCode 题解丨一周爆刷分治法:合并两棵二叉树

    描述 给出两棵二叉树,当你用其中一棵覆盖另一棵时,两棵树的一些节点会发生重叠,而其他节点则不会重叠. 您需要将它们合并到一棵新的二叉树中. 合并的规则是如果两个节点重叠,则将节点值加起来作为合并节点的 ...

最新文章

  1. 五年前的转正我没有留下,校招进不了大公司就是失败吗?
  2. centos mysql-5.5.20_centos 下安装mysql5.5.20出现的问题
  3. matlab调用kmeans_K_Means算法的MATLAB实现
  4. Android studio/sdk/appium/jdk遇到的坑坑洼洼
  5. 几个有用的word小技巧,保准提升效率~
  6. sql 删除字段中下划线_SQL基础教程知识点总结
  7. 目标函数,代价函数,损失函数
  8. 知方可补不足~sqlserver中使用sp_who查看sql的进程
  9. 中国人去日本买电饭煲令人痛心!董明珠:难道我泱泱大国造不出吗?
  10. Mysql原理、主从复制、半同步复制及基于SSL复制
  11. 计算机网络语音传输杂音回音,QQ语音时,怎么消除麦克风回音、噪音、杂音
  12. 如何用微信公众号二维码事件做扫码登陆
  13. Cobbler自动部署CentOS系统
  14. 如何从ext3升级到ext4?
  15. vscode_历史版本下载_便携版/安装版
  16. 从源码角度分析Android中的Binder机制的前因后果
  17. 奶爸日记10 - 爸爸妈妈觉得你泠
  18. 【阿里聚安全技术公开课】业务安全及防护(数据风控)
  19. 使用MDT2013部署Win8系统之八-通过MDT捕获镜像
  20. vim/gvim插件-verilog autodef-自动生成

热门文章

  1. 解决新版Chrome拦截自动播放(Google浏览器不支持audio自动播放问题)
  2. 武穴计算机培训班,武穴理工中专计算机培训队专业组培训计划
  3. 华为鸿蒙软件供应商,安卓12发布后,国产争相支持!华为鸿蒙开源,厂商却集体无感...
  4. ArrayBlockingQueue的put和take过程详解
  5. 教你如何“绑架”用户,说说“换用成本”
  6. mac无法访问服务器的共享文件,如何使用Mac上的“文件共享”进行连接
  7. python的5种高级用法,效率提高没毛病!
  8. netlink学习笔记(一)
  9. jsp内置对象--request对象
  10. 华为交换机:本征VLAN