3427. 变长子数组求和

🔍 子数组元素求和问题全解析 —— 多种解法与性能对比

📘 题目描述

给定一个长度为 n 的整数数组 nums,对于每个下标 i(0 <= i < n),我们定义一个子数组为:

nums[start ... i],其中 start = max(0, i - nums[i])

目标是:对于每个下标 i,计算它所对应的子数组中所有元素的总和,然后将这些和相加,得到最终结果。

🧾 示例:

输入: nums = [1, 2, 3]
对应子数组分别为:
- i=0: start=0 → nums[0:1] = [1] → 和=1
- i=1: start=0 → nums[0:2] = [1,2] → 和=3
- i=2: start=0 → nums[0:3] = [1,2,3] → 和=6

总和: 1 + 3 + 6 = 10
输出: 10

🎯 解题思路分析

本题的核心在于如何高效地求出多个子数组的区间和。朴素做法直接对每个子数组求 sum(nums[start:i+1]),但这种方法在数据量大时效率低下。

🔧 常规思路步骤:

  1. 遍历每个索引 i
  2. 计算对应的 start = max(0, i - nums[i])
  3. 取子数组 nums[start ... i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值