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;
    }
}
相关推荐
MY_TEUCK2 小时前
Sealos 平台部署实战指南:结合 Cursor 与版本发布流程
java·人工智能·学习·aigc
三毛的二哥2 小时前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
我爱cope2 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
南宫萧幕2 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
朝新_3 小时前
【Spring AI 】图像与语音模型实战
java·人工智能·spring
RH2312113 小时前
2026.4.16Linux 管道
java·linux·服务器
zmsofts3 小时前
java面试必问13:MyBatis 一级缓存、二级缓存:从原理到脏数据,一篇讲透
java·面试·mybatis
故事和你914 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅4 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头4 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法