LeetCode862 和至少为k的最短子数组

题目:

解析:

1、先构造前缀和数组

2、单调队列存放滑动窗口,目的求Sj-Si >=k的情况下,窗口最小。

代码:

java 复制代码
class Solution {
    public int shortestSubarray(int[] nums, int k) {
        int n = nums.length;
        long[] sums = new long[n + 1];      // 注意这里加和后,容易超过int,加和用long数组
        for (int i = 1; i <= n; i++) {
            sums[i] = sums[i - 1] + nums[i - 1];
        }

        Deque<Integer> deque = new LinkedList<>();
        deque.add(0);

        int res = Integer.MAX_VALUE;

        for (int i = 1; i <= n; i++) {
            while (!deque.isEmpty() && sums[i] - sums[deque.peek()] >= k) { // 注意边界,求最小这里应该 >=
                res = Math.min(res, i - deque.poll());
            }

			//将所有大于等于s[i]的数删掉 问题:这里不删能怎么样,上面求最小值会守影响么?
            while (!deque.isEmpty() && sums[deque.peekLast()] >= sums[i]) {  // 注意边界,求最小这里应该 >=
                deque.pollLast();
            }

            deque.add(i);
        }

        if (res == Integer.MAX_VALUE) {
            return -1;
        }

        return res;
    }
}
相关推荐
程序媛徐师姐6 分钟前
Java基于SpringBoot的智能城市管理平台,附源码+文档说明
java·spring boot·java springboot·智能城市管理平台·java智能城市管理平台·java智能城市管理·智能城市管理
H CHY8 分钟前
C++代码
c语言·开发语言·数据结构·c++·算法·青少年编程
alphaTao10 分钟前
LeetCode 每日一题 2025/12/22-2025/12/28
算法·leetcode
tryxr12 分钟前
Java抽象类特点、使用方式和应用场景
java·开发语言·向上转型·抽象类·向下转型
xiaolang_8616_wjl12 分钟前
c++题目_传桶(改编于atcoder(题目:Heavy Buckets))
数据结构·c++·算法
潲爺18 分钟前
Java-多线程
java·笔记·学习
李慕婉学姐20 分钟前
【开题答辩过程】以《婴幼儿辅食健康监测与反馈系统》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot
中國龍在廣州21 分钟前
生成不遗忘,「超长时序」世界模型,北大EgoLCD长短时记忆加持
人工智能·深度学习·算法·自然语言处理·chatgpt
派大鑫wink22 分钟前
Stream 流:简化集合操作的利器
java·开发语言
亓才孓26 分钟前
java中的Math.Radom拓展
开发语言·python·算法