如何优雅计算数组中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
相关产品推荐
相关产品推荐

