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

列表相邻两元素最大乘积计算异常问题求助

解决相邻元素最大乘积的循环与初始值问题

看起来你的问题出在循环边界条件和初始值设置这两个核心点上,咱们一步步拆解解决:

问题根源分析

  1. 初始值设置错误:你把max初始设为-1000,这在双元素列表(比如[-1,-2])的场景下,如果循环没执行,就会直接返回这个错误的初始值——而双元素列表的正确结果应该是两个元素的乘积,根本不需要复杂的循环判断。
  2. 循环边界错误:测试用例[3, 6, -2, -5, 7, 3]漏掉了最后一对元素7*3=21,说明你的循环没有覆盖到所有相邻元素对,大概率是循环的终止条件写窄了(比如用了range(len(nums)-2),这样会少遍历最后一组元素)。

正确实现代码

这里给出Python的修正版本,完全覆盖你的测试场景:

def max_adjacent_product(nums):
    # 先处理边界情况:列表长度不足2时无相邻元素,可返回None或按需抛出异常
    if len(nums) < 2:
        return None
    
    # 初始值直接设为第一对相邻元素的乘积,避免固定值带来的偏差
    max_prod = nums[0] * nums[1]
    
    # 循环遍历所有相邻元素对:range(len(nums)-1)会生成0到len(nums)-2的索引,刚好覆盖每一组i和i+1
    for i in range(len(nums) - 1):
        current_prod = nums[i] * nums[i+1]
        if current_prod > max_prod:
            max_prod = current_prod
    
    return max_prod

测试验证

  • 测试用例[3, 6, -2, -5, 7, 3]:循环会依次计算3*6=18、6*(-2)=-12、(-2)*(-5)=10、(-5)*7=-35、7*3=21,最终max_prod会更新为21,符合预期。
  • 测试用例[-1, -2]:初始值就是(-1)*(-2)=2,循环执行一次(i=0),计算结果和初始值一致,最终返回2,正确。

关键优化点总结

  • 初始值不要用固定的负数/0,而是直接用列表的第一对元素乘积,这样天然适配双元素列表,也能正确应对全负数的场景(比如[-5,-4,-3],最大乘积是(-5)*(-4)=20)。
  • 循环范围用range(len(nums)-1):因为range是左闭右开的区间,len(nums)-1作为结束值,会让i遍历到len(nums)-2,刚好对应最后一组相邻元素nums[len(nums)-2] * nums[len(nums)-1]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:16:37