🗒️3364. 最小正和子数组
2025-5-7
| 2025-5-7
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
May 7, 2025 01:56 AM
给你一个整数数组 nums 和 两个 整数 l 和 r。你的任务是找到一个长度在 l 和 r 之间(包含)且和大于 0 的 子数组 的 最小 和。
返回满足条件的子数组的 最小 和。如果不存在这样的子数组,则返回 -1。
子数组 是数组中的一个连续 非空 元素序列。

一、前缀和——§1.2 前缀和与哈希表

暴力枚举

时间复杂度:
空间复杂度:
暴力枚举 + 前缀和
时间复杂度:
空间复杂度:

前缀和与有序集合

回到一开始的问题,我们使用单调栈是不行的。例如,我们使用单调栈(最大)可以得到区间的最大值,但是无法保证最后得到的 target 是大于 0 的。而且使用单调栈会把之前小于最大值的元素给弹出去。
multiset<set>库中一个非常有用的类型,能时刻保证序列中的数是有序的,而且序列中可以存在重复的数
我们使用 multiset 维护 j - r <= i <= j - l 的范围内的 s[i]

📎 参考

  • 【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)
  • 1685. 有序数组中差绝对值之和1546. 和为目标值且不重叠的非空子数组的最大数目
    Loading...