Leetcode862和至少为K的最短子数组

题目分析

遍历数组,对于每个位置i,假设子数据必须以i作为右边界,求出往左延伸多短,能够让累加和大于等于K,最后从所有答案中选择最小值。

准备一个双端队列,要求从头到尾严格小到大。

当来到位置i,0~i范围的前缀和为x时,从头部依次考察,如果x减去队列头部指示的前缀和达标,则记录答案并将头部元素弹出,因为后续位置使用该前缀和得到的结果不会更短。

加入新的前缀和时,如果不满足队列小到大的顺序,则从尾部弹出元素。

求解代码

java 复制代码
public static int MAXN = 100001;
	public static long[] sum = new long[MAXN];
	public static int[] deque = new int[MAXN];
	public static int h,t;
	public static int shortestSubarray(int[] arr,int K){
		int n = arr.length;
		for(int i = 0;i<n;i++){
			sum[i+1]=sum[i]+arr[i];
		}
		h=t=0;
		int ans = Integer.MAX_VALUE;
		for(int i=0;i<=n;i++){
			while (h!=t&&sum[i]-sum[deque[h]]>=K) {
				ans = Math.min(ans, i-deque[h++]);
			}

			while (h!=t&&sum[deque[t-1]]>=sum[i]) {
				t--;
			}
			deque[t++]=i;
		}
		return ans!=Integer.MAX_VALUE?ans:-1;
	}
相关推荐
个 人 练 习 生1 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
2601_966949651 小时前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖1 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_19861 小时前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属1 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin199701080161 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
波加曼大王1 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff2 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹2 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏