|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hrp 于 2021-3-21 12:22 编辑
初学摸索阶段,暴力求解
- // ### 练习:
- // 给定一系列数字,使用 vector
- // 并打印这个列表的平均数(mean, average)、
- // 中位数(排列数组后位于中间的值)和
- // 众数(mode,出现次数最多的值;这里哈希函数会很有帮助)。
- use std::collections::HashMap;
- fn main() {
- let mut shuzi = vec![131, 36, 5, 5, 6, 4514, 6, 351];
- let (average, mid_num, mode_list) = solution(&mut shuzi);
- println!(
- "列表:{:?}\n中位数:{}\n众数:{:?}\n平均数:{}",
- &shuzi, &mid_num, &mode_list, &average,
- );
- }
- fn solution(list: &mut Vec<i32>) -> (f64, i32, Vec<i32>) {
- // 排序
- list.sort();
- // 列表长度
- let length = list.len();
- // 中位数
- let mid_num = list[length / 2];
- // 求列表数和
- let sum: i32 = list.iter().sum();
- // 求平均数
- let average: f64 = sum as f64 / length as f64;
- // 新建空哈希表用于储存列表中每个数字出现次数
- let mut mode_m: HashMap<i32, u32> = HashMap::new();
- // 新建可变变量max_count储存任意数字出现的最大次数
- let mut max_count = 0;
- // 新建一个储存众数的空列表
- let mut mode_list: Vec<i32> = Vec::new();
- // 遍历列表,计算数字出现次数
- for i in list.clone() {
- let count = mode_m.entry(i).or_insert(0);
- *count += 1;
- // 如果count大于等于max_count
- if *count > max_count {
- // 最大出现次数max_count更新为count
- max_count = *count;
- }
- }
- // 遍历list
- for value in list {
- // 当前数字出现次数count
- let count = mode_m.get(value).unwrap();
- // 如果当前数字出现次数等于max_count且mode_list中没有value
- if (*count == max_count) && !mode_list.contains(value) {
- // 则将该数字value加入众数列表mode_list
- mode_list.push(*value);
- }
- }
- // 返回结果,也可以写成 return (average, mid_num, mode_list);
- (average, mid_num, mode_list)
- }
复制代码 |
评分
-
查看全部评分
|