425 周赛第一题 3364. 最小正和子数组
给你一个整数数组 nums
和 两个 整数 l
和 r
。你的任务是找到一个长度在 l
和 r
之间(包含)且和大于 0 的 子数组 的 最小 和。
返回满足条件的子数组的 最小 和。如果不存在这样的子数组,则返回 -1。
子数组 是数组中的一个连续 非空 元素序列。
示例 1:
输入: nums = [3, -2, 1, 4], l = 2, r = 3
输出: 1
解释:
长度在 l = 2
和 r = 3
之间且和大于 0 的子数组有:
[3, -2]
和为 1[1, 4]
和为 5[3, -2, 1]
和为 2[-2, 1, 4]
和为 3
其中,子数组 [3, -2]
的和为 1,是所有正和中最小的。因此,答案为 1。
示例 2:
输入: nums = [-2, 2, -3, 1], l = 2, r = 3
输出: -1
解释:
不存在长度在 l
和 r
之间且和大于 0 的子数组。因此,答案为 -1。
示例 3:
输入: nums = [1, 2, 3, 4], l = 2, r = 4
输出: 3
解释:
子数组 [1, 2]
的长度为 2,和为 3,是所有正和中最小的。因此,答案为 3。
class Solution: def minimumSumSubarray(self, nums: List[int], l: int, r: int) -> int: length = len(nums) pre = [0] * (length+1) for i,n in enumerate(nums): pre[i+1] = pre[i] + n ans = -1 for ll in range(l,r+1): for i in range(length): if i+ll <= length: temp_ans = pre[i+ll] - pre[i] if temp_ans>0: if ans==-1: ans = temp_ans else: ans = min(temp_ans,ans) if temp_ans==1: return 1 return ans
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程