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

Go语言数组正负判断规则函数实现及代码问题咨询

原函数问题分析

原函数完全不符合需求,存在以下核心问题:

  • 错误处理0的逻辑:原函数遇到值为0的元素直接返回0,但需求明确要求只有数组同时包含正数和负数时才返回0,0的存在不触发这个返回条件。
  • 提前返回导致逻辑断裂:循环中每次比较后立即return,根本无法遍历完整个数组,既无法判断数组是否同时存在正负,也找不到真正的最小正数或最大负数。
  • 最大负数判断错误:处理负数时用v < minmax更新值,这会找到更小的负数(比如-5比-1小),但需求要求返回最大的非0负数(即最接近0的负数)。
正确实现

以下是符合需求的Go语言实现:

func sesi(arr []int) int {
    hasPositive := false
    hasNegative := false
    minPositive := int(^uint(0) >> 1) // 初始化int类型最大值
    maxNegative := -int(^uint(0) >> 1) - 1 // 初始化int类型最小值

    for _, v := range arr {
        switch {
        case v > 0:
            hasPositive = true
            if v < minPositive {
                minPositive = v
            }
        case v < 0:
            hasNegative = true
            if v > maxNegative {
                maxNegative = v
            }
        // 0不参与正负判断,也不影响最小正/最大负的计算
        }
    }

    // 同时存在正数和负数,返回0
    if hasPositive && hasNegative {
        return 0
    }

    // 仅包含正数,返回最小非0正数
    if hasPositive {
        return minPositive
    }

    // 仅包含负数,返回最大非0负数
    return maxNegative
}

实现逻辑说明

  1. 遍历数组时,先标记数组是否存在正数、负数,同时记录当前找到的最小正数和最大负数;
  2. 遍历完成后,根据标记结果分支处理:
    • 若同时存在正负数,直接返回0;
    • 若只有正数,返回记录的最小非0正数;
    • 若只有负数,返回记录的最大非0负数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:46:05