当前位置: 首页 > news >正文

Go语言实战案例 - 找出切片中的最大值与最小值

实用性案例 | 算法基础 | 初学者友好


一、案例目标

实现一个程序,接收用户输入的一组整数(使用切片存储),然后找出其中的最大值与最小值,并打印结果。


二、 应用场景举例

  • • 数据分析中找出极值(最高温度、最低成绩)
  • • 统计程序中的最小成本和最大利润
  • • 游戏、金融、监控等场景中的实时指标筛选

三、 涉及知识点

知识点说明
切片 []int 使用动态数组处理数据序列
for 循环遍历遍历每个元素
条件判断 if判断是否是最大或最小值
初始值策略设置最大/最小初始值是关键

四、🛠 功能需求

  1. 1. 用户输入一组整数(以空格分隔);
  2. 2. 将其转换为整数切片;
  3. 3. 遍历切片,找出最大值与最小值;
  4. 4. 打印原始切片和结果;
  5. 5. 处理非法输入(如非数字字符);

五、 完整示例代码

package mainimport ("bufio""fmt""os""strconv""strings"
)func main() {fmt.Println("请输入一组整数(空格分隔):")reader := bufio.NewReader(os.Stdin)input, _ := reader.ReadString('\n')numbers, err := parseInput(input)if err != nil || len(numbers) == 0 {fmt.Println("输入有误,请输入一组有效的整数。")return}fmt.Println("输入的切片:", numbers)max, min := findMaxMin(numbers)fmt.Println("最大值:", max)fmt.Println("最小值:", min)
}// 字符串转整数切片
func parseInput(input string) ([]int, error) {fields := strings.Fields(input)var result []intfor _, s := range fields {n, err := strconv.Atoi(s)if err != nil {return nil, err}result = append(result, n)}return result, nil
}// 查找最大值和最小值
func findMaxMin(nums []int) (int, int) {max := nums[0]min := nums[0]for _, n := range nums {if n > max {max = n}if n < min {min = n}}return max, min
}

六、 示例运行

输入示例:
请输入一组整数(空格分隔):
45 3 67 88 12 0 -5 99
输出结果:
输入的切片: [45 3 67 88 12 0 -5 99]
最大值: 99
最小值: -5

七、 核心解析

  1. 1. 初始化最大/最小值为切片第一个元素
    max := nums[0]
    min := nums[0]
  2. 2. 遍历并比较每个元素
    for _, n := range nums {if n > max { max = n }if n < min { min = n }
    }
  3. 3. 注意切片为空的情况需提前处理

八、拓展练习建议

  • • 输出最大值和最小值出现的位置(索引);
  • • 同时计算平均值;
  • • 支持浮点数输入(改用 []float64);
  • • 排除负数,只在正数中查找最大值;
  • • 将功能封装为通用工具函数供其他模块调用;

九、常见问题

问题原因建议解决
程序 panic 空切片没有输入或未检查长度在调用前判断切片是否为空
输入字符串报错包含非数字字符提前清洗输入或添加错误提示
最大最小值为0初始化为0不准确应初始化为切片第一个值

小结

本案例是最常见、最实用的遍历算法之一,学习要点包括:

  • • 如何从切片中提取信息(极值)
  • • 逻辑清晰的比较流程
  • • 错误处理与用户输入的解析

这些技巧将在你后续写数据处理、排序、图表可视化、甚至机器学习数据预处理时频繁使用。


http://www.dtcms.com/a/284039.html

相关文章:

  • vue3+ts+elementui-表格根据相同值合并
  • 宝塔面板一键迁移(外网服务器迁移到内网服务器)
  • Robin问题傅里叶变换与解分析
  • java如何实现打印list对象占用多大内存
  • 算法学习笔记:26.二叉搜索树(生日限定版)——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • xss防御策略
  • 单例模式详细讲解
  • 从 0 到 1 玩转 XSS - haozi 靶场:环境搭建 + 全关卡漏洞解析
  • 50倍性能飞跃!Spring Boot+Doris Stream Load海量数据实时更新方案
  • RabbitMQ—消息可靠性保证
  • 破解本地数据库困局:DbGate+内网穿透如何实现远程管理自由
  • React Native打开相册选择图片或拍照 -- react-native-image-picker
  • CSDN首发:研究帮平台深度评测——四大AI引擎融合的创作革命
  • MySQL安全修改表结构、加索引:ON-Line-DDL工具有哪些
  • mapbox V3 新特性,添加模型图层
  • 深入GPU硬件架构及运行机制
  • OpenCV学习笔记二(色彩空间:RGB、HSV、Lab、mask)
  • 多维动态规划题解——最长公共子序列【LeetCode】空间优化:两个数组(滚动数组)
  • Python eval函数详解 - 用法、风险与安全替代方案
  • Java使用FastExcel实现模板写入导出(多级表头)
  • 设计模式四:装饰模式(Decorator Pattern)
  • maven本地仓库清缓存py脚本
  • 设计模式笔记_结构型_装饰器模式
  • centos中新增硬盘挂载文件夹
  • Install Docker Engine on UbuntuMySQL
  • 【安卓按键精灵辅助工具】adb调试工具连接安卓模拟器异常处理
  • Vuex中store
  • 爬虫核心原理与入门技巧分析
  • JavaScript中的Window对象
  • Vue3入门-组件及组件化