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

如何计算两个一维数组对应元素的最小值之和?附代码求解析

你的代码问题分析与修正(针对两数组对应位置最小值求和)

代码里的核心问题

  • 语法错误: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从头到尾未使用,属于无效代码。

正确逻辑与修正后的代码

实现需求的核心步骤:

  1. 取两个数组的最小长度作为有效遍历范围,避免越界
  2. 初始化累加变量,初始值为0
  3. 遍历每个索引位置,取对应元素的最小值并累加到变量中
  4. 返回累加结果

修正后的代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:20