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 }
实现逻辑说明
- 遍历数组时,先标记数组是否存在正数、负数,同时记录当前找到的最小正数和最大负数;
- 遍历完成后,根据标记结果分支处理:
- 若同时存在正负数,直接返回0;
- 若只有正数,返回记录的最小非0正数;
- 若只有负数,返回记录的最大非0负数。
内容的提问来源于stack exchange,提问作者wupssie
相关产品推荐
相关产品推荐

