题解 | #合并表记录#
合并表记录
http://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201
两种垃圾写法:
- 先用HashMap合并,再用Vec排序,哈哈哈,好顺手,就是写的多。
use std::io::{self, *};
use std::str::FromStr;
use std::collections::HashMap;
use std::cmp::Ordering;
fn main(){
let stdin = io::stdin();
let mut n = 0usize;
let mut map : HashMap<i32,i32>= HashMap::new();
let mut index = 0i32;
let mut value = 0i32;
for line in stdin.lock().lines(){
let ll = line.unwrap();//String
if n == 0 {
n = usize::from_str(ll.as_str()).unwrap();
}else{
let numbers: Vec<&str> = ll.split(" ").collect();
index = numbers[0].trim().parse::<i32>().unwrap_or(0);
value = numbers[1].trim().parse::<i32>().unwrap_or(0);
value = match map.get(&index) {
None => value,
Some(&old) => value + old,
};
map.insert(index, value);
}
}
let mut v : Vec<(i32,i32)> = vec![];
for (key, val) in map.iter() {
v.push((*key,*val));
}
v.sort_by(|(a,c),(b,d)| a.cmp(&b));
for (key, val) in v.iter() {
println!("{} {}",key,val);
}
}
- 无脑Vec:插入之后排序再 remove()
use std::io::{self, *};
use std::str::FromStr;
use std::cmp::Ordering;
fn main(){
let stdin = io::stdin();
let mut n = 0usize;
let mut index = 0i32;
let mut value = 0i32;
let mut v : Vec<(i32,i32)> = vec![];
for line in stdin.lock().lines(){
let ll = line.unwrap();//String
if n == 0 {
n= 1;
}else{
let numbers: Vec<&str> = ll.split(" ").collect();
index = numbers[0].trim().parse::<i32>().unwrap_or(0);
value = numbers[1].trim().parse::<i32>().unwrap_or(0);
v.push((index,value));
}
}
v.sort_by(|(a,c),(b,d)| a.cmp(&b));
for i in (1..v.len()).rev(){
if v[i].0 == v[i-1].0 {
v[i-1].1 += v[i].1;
v.remove(i);
}
}
for (key, val) in v.iter() {
println!("{} {}",key,val);
}
}
我属实拉胯!
用 Rust 刷华为机试HJ 文章被收录于专栏
用 Rust 刷 HJ100 题,只需要懂基础 Rust 语法就能看懂