遍历数组求固定索引组合下abs(3*sum1+5*sum2)的最大值
解决数组滑动窗口求和与极值计算问题
我来帮你搞定这个数组计算的任务,思路和代码实现都整理好了,一步步来:
问题拆解
首先明确我们要做的核心事情:
- 给定数组
d = [1,2,3,4,5,6,7,8],要生成8种滑动配置:每次sum1取连续3个元素,sum2取剩下的5个元素(数组是循环的,偏移到末尾后会绕回开头) - 对每个配置计算
abs(3*sum1 + 5*sum2) - 从8个结果里找出最大值
高效实现思路
- 循环滑动窗口:因为数组有8个元素,刚好从索引0到7各作为一次sum1的起始点,每次取起始点后3个元素(用模运算
%8处理循环边界,避免索引越界) - sum2的简化计算:sum2其实是数组总和减去sum1,不用每次都遍历5个元素,既省代码又提效率
- 跟踪最大值:遍历每个配置时,实时更新当前的最大结果,同时可以记录对应的最优配置方便验证
Python代码实现
d = [1, 2, 3, 4, 5, 6, 7, 8] total_sum = sum(d) max_result = -float('inf') best_config = {} for start_idx in range(8): # 计算当前sum1的三个元素(处理循环边界) sum1 = d[start_idx] + d[(start_idx + 1) % 8] + d[(start_idx + 2) % 8] # sum2 = 总和 - sum1,简化计算 sum2 = total_sum - sum1 # 计算当前配置的结果值 current_val = abs(3 * sum1 + 5 * sum2) # 更新最大值及对应配置 if current_val > max_result: max_result = current_val best_config = { "sum1_elements": [d[start_idx], d[(start_idx+1)%8], d[(start_idx+2)%8]], "sum2_elements": [d[(start_idx+i)%8] for i in range(3, 8)] } # 输出结果 print(f"最终最大结果值: {max_result}") print(f"对应的最优配置:") print(f"sum1元素:{best_config['sum1_elements']}") print(f"sum2元素:{best_config['sum2_elements']}")
运行结果验证
运行代码后会得到:
- 最大结果值:168
- 对应的sum1元素:
[1, 2, 3],sum2元素:[4, 5, 6, 7, 8] - 手动验证:sum1=1+2+3=6,sum2=4+5+6+7+8=30,代入公式得
abs(3*6 +5*30) = abs(18+150) = 168,完全正确
如果你需要用其他语言实现,核心逻辑是一样的:处理循环滑动窗口、用总和简化sum2计算、跟踪最大值即可。
内容的提问来源于stack exchange,提问作者SimGudim
相关产品推荐
相关产品推荐

