列表相邻两元素最大乘积计算异常问题求助
解决相邻元素最大乘积的循环与初始值问题
看起来你的问题出在循环边界条件和初始值设置这两个核心点上,咱们一步步拆解解决:
问题根源分析
- 初始值设置错误:你把
max初始设为-1000,这在双元素列表(比如[-1,-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
相关产品推荐
相关产品推荐

