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;
    }
}
相关推荐
培培说证16 小时前
2026大专跨境电商专业,想好就业考哪些证书比较好?
java
计算机毕设指导616 小时前
基于微信小程序的旅游线路定制系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·旅游
goodlook012316 小时前
监控平台搭建-监控指标展示-Grafana篇(五)
java·算法·docker·grafana·prometheus
这是个栗子16 小时前
前端开发中的常用工具函数(持续更新中...)
前端·javascript·算法
断剑zou天涯16 小时前
【算法笔记】有序表——相关题目
笔记·算法
qq_124987075316 小时前
基于Spring Boot的微信小程序的智慧商场系统的设计与实现
java·spring boot·spring·微信小程序·小程序·毕业设计·计算机毕业设计
椰羊~王小美16 小时前
通用的导入、导出方法
java·spring boot
wearegogog12316 小时前
基于MATLAB的微光图像增强实现方案
算法
yaoxin52112316 小时前
277. Java Stream API - 去重与排序:Stream 中的 distinct() 与 sorted()
java·开发语言
断剑zou天涯16 小时前
【算法笔记】有序表——SB树
笔记·算法