You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅计算数组中7的倍数相邻元素对的最小和(无需超大初始值)

更优雅的方式计算相邻7倍数元素对的最小和

首先要纠正原代码里的一个明显错误:range(len(a))会导致循环到最后一个元素时,i+1超出数组索引范围,引发IndexError,正确的应该是range(len(a)-1)。另外,用超大数值初始化minSum存在两个问题:一是逻辑不严谨(如果所有有效和都比这个数值大,结果就错了),二是无法正确处理没有符合条件的元素对的场景(此时minSum会保留初始的超大值,不符合预期)。

下面提供两种更优雅的解决方案:

方法一:先收集所有有效和,再计算数量与最小值

这种方法逻辑直观,代码可读性强,适合大多数常规场景:

a = [7, 14, 2, 6, 5, 7, 7]

valid_sums = []
for i in range(len(a) - 1):
    num1, num2 = a[i], a[i+1]
    if num1 % 7 == 0 and num2 % 7 == 0:
        valid_sums.append(num1 + num2)

counter = len(valid_sums)
# 若没有有效对,可根据需求设置默认值(比如None、0或提示文本)
min_sum = min(valid_sums) if valid_sums else None

print(counter, min_sum)  # 输出:2 14

优势:

  • 无需预设超大初始值,逻辑更严谨
  • 自然处理无有效对的情况
  • 可复用valid_sums做其他后续处理(比如求平均值、排序等)

方法二:动态初始化最小值,节省内存

如果数组规模很大,不想额外占用内存存储所有有效和,可以用这种方式,只在遍历过程中更新最小值:

a = [7, 14, 2, 6, 5, 7, 7]

counter = 0
min_sum = None

for i in range(len(a) - 1):
    num1, num2 = a[i], a[i+1]
    if num1 % 7 == 0 and num2 % 7 == 0:
        counter += 1
        current_sum = num1 + num2
        # 第一次遇到有效对时直接赋值,之后再比较更新
        if min_sum is None or current_sum < min_sum:
            min_sum = current_sum

print(counter, min_sum)  # 输出:2 14

优势:

  • 空间复杂度为O(1),适合处理大规模数组
  • 同样能正确处理无有效对的场景(此时min_sum为None)

内容的提问来源于stack exchange,提问作者user19712456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:55:24