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]
。参考 灵茶山艾府