2561. 重排水果
This commit is contained in:
parent
a44111df84
commit
254acc165e
55
src/main.rs
55
src/main.rs
|
@ -1,21 +1,54 @@
|
|||
use std::cmp::min;
|
||||
use std::collections::HashMap;
|
||||
|
||||
struct Solution;
|
||||
impl Solution {
|
||||
pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {
|
||||
let mut ans : Vec<Vec<i32>>= vec![vec![1]];
|
||||
for i in 1..num_rows {
|
||||
let mut row = vec![1];
|
||||
let prev_row = &ans[(i - 1) as usize];
|
||||
for j in 1..prev_row.len() {
|
||||
row.push(prev_row[j - 1] + prev_row[j]);
|
||||
pub fn min_cost(basket1: Vec<i32>, basket2: Vec<i32>) -> i64 {
|
||||
let mut map : HashMap<i32,i32> = HashMap::new();
|
||||
let mut total_cost: i64 = 0;
|
||||
let mut min_cost = i32::MAX;
|
||||
for i in basket1.iter() {
|
||||
*map.entry(*i).or_insert(0) += 1;
|
||||
}
|
||||
row.push(1);
|
||||
ans.push(row);
|
||||
for i in basket2.iter() {
|
||||
*map.entry(*i).or_insert(0) -= 1;
|
||||
}
|
||||
ans
|
||||
let mut kvs: Vec<(i32, i32)> = map.iter().filter(|(k, v)| {min_cost = min(min_cost, **k); if **v == 0 {false} else {true}}).map(|(k, v)| (*k, *v)).collect();
|
||||
let mut err = false;
|
||||
kvs.sort_by(|a, b| {
|
||||
err |= b.1 % 2 == 1 || a.1 % 2 == 1;
|
||||
if a.1 > 0 && b.1 < 0 {
|
||||
std::cmp::Ordering::Greater
|
||||
} else if a.1 < 0 && b.1 > 0 {
|
||||
std::cmp::Ordering::Less
|
||||
} else {
|
||||
a.0.cmp(&b.0)
|
||||
}
|
||||
});
|
||||
if err
|
||||
{ return -1; }
|
||||
if kvs.is_empty() {
|
||||
return 0;
|
||||
}
|
||||
let mut l = 0;
|
||||
let mut r = kvs.len() - 1;
|
||||
while l < r {
|
||||
let cost = min( kvs[l].1.abs(), kvs[r].1.abs()) as i64;
|
||||
total_cost += min(min(kvs[l].0, kvs[r].0) as i64 * cost / 2,min_cost as i64 * cost);
|
||||
kvs[l].1 += cost as i32;
|
||||
kvs[r].1 -= cost as i32;
|
||||
if kvs[l].1 >= 0 {
|
||||
l+=1;
|
||||
}
|
||||
if kvs[r].1 <= 0 {
|
||||
r-=1;
|
||||
}
|
||||
}
|
||||
if kvs[l].1 > 0 || kvs[r].1 > 0 { -1 } else { total_cost }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let sl = Solution::generate(7);
|
||||
let sl = Solution::min_cost(vec![4,2,2,2], vec![1,4,1,2]);
|
||||
println!("{:?}", sl);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue