如何计算两个一维数组对应元素的最小值之和?附代码求解析
你的代码问题分析与修正(针对两数组对应位置最小值求和)
代码里的核心问题
- 语法错误:
len(arr1[] && arr2[])完全不符合Go语法,获取数组长度用len(数组名);要避免遍历越界,需取两个数组长度的较小值作为有效遍历长度,比如n := min(len(arr1), len(arr2))(Go 1.21+支持内置min函数,低版本可自行实现)。 - 循环越界:
i<=n会导致循环到i=n,而数组索引最大为n-1,直接访问arr1[n]会触发panic,正确条件是i < n。 - 变量作用域错误:if/else块里声明的
min是块级局部变量,循环外的return min根本访问不到该变量;且每次循环都会重新创建min,之前的结果完全没保留。 - 未实现求和逻辑:你的需求是把所有对应位置的最小值累加,但代码没有任何累加操作,最后想返回的只是最后一次循环的局部
min,完全不符合需求。 - 冗余变量:
minA和minb从头到尾未使用,属于无效代码。
正确逻辑与修正后的代码
实现需求的核心步骤:
- 取两个数组的最小长度作为有效遍历范围,避免越界
- 初始化累加变量,初始值为0
- 遍历每个索引位置,取对应元素的最小值并累加到变量中
- 返回累加结果
修正后的代码:
func SumOfMinElements(arr1 []int, arr2 []int) int { sum := 0 // 取两个数组的最小长度,防止越界 n := len(arr1) if len(arr2) < n { n = len(arr2) } for i := 0; i < n; i++ { minVal := arr1[i] if arr2[i] < minVal { minVal = arr2[i] } sum += minVal } return sum }
补充说明
- 若使用Go 1.21及以上版本,可直接用内置
min函数简化取最小值的逻辑:minVal := min(arr1[i], arr2[i]) - 代码会自动处理数组长度不一致或其中一个数组为空的情况,避免触发panic。
内容的提问来源于stack exchange,提问作者curiouscoder
相关产品推荐
相关产品推荐

