JavaScript如何计算数组指定索引区间的和并将结果存入新数组?
解决方案
首先明确需求:遍历start和end数组的每一对索引,计算main数组中从start[i]到end[i](包含两端)的元素和,最后把所有结果存入新数组。
方法1:基础循环切片求和
直接遍历每一组起始、结束索引,利用Python数组切片的特性(注意切片是左闭右开,所以要把end[i]+1作为切片右边界),然后求和:
start = [0, 1, 0] end = [1, 5, 5] main = [1, 2, 3, 4, 5, 6] result = [] for s, e in zip(start, end): # 切片main[s:e+1]取到从s到e的所有元素 sum_val = sum(main[s:e+1]) result.append(sum_val) print(result) # 输出: [3, 20, 21]
方法2:前缀和优化(适合大数组场景)
如果main数组规模很大,或者需要多次计算区间和,前缀和可以把单次求和的时间复杂度降到O(1),效率更高:
start = [0, 1, 0] end = [1, 5, 5] main = [1, 2, 3, 4, 5, 6] # 构建前缀和数组:prefix[0] = 0,prefix[i] = main[0]+...+main[i-1] prefix = [0] * (len(main) + 1) for i in range(len(main)): prefix[i+1] = prefix[i] + main[i] result = [] for s, e in zip(start, end): # 区间s到e的和 = prefix[e+1] - prefix[s] sum_val = prefix[e+1] - prefix[s] result.append(sum_val) print(result) # 输出: [3, 20, 21]
两种方法都能得到预期结果,基础法写法简单适合小数据量;前缀和法则更适合频繁计算区间和的场景。
内容的提问来源于stack exchange,提问作者Spade
相关产品推荐
相关产品推荐

