Created
December 20, 2021 09:16
-
-
Save southerton81/111ac3350e14756983d4a6a0c7696b05 to your computer and use it in GitHub Desktop.
Rust bestSum()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::collections::HashMap; | |
fn bestSum(targetSum: i32, v: &Vec<i32>, memo: &mut HashMap<i32, Vec<i32>>) -> Vec<i32> { | |
if targetSum == 0 { return vec![]; } | |
if targetSum < 0 { return vec![-1]; } | |
if memo.contains_key(&targetSum) { | |
return memo[&targetSum].clone(); | |
} | |
let mut result: Vec<i32> = Vec::new(); | |
let mut len = 100000; | |
for val in v { | |
let rem = targetSum - val; | |
let mut lastResult = bestSum(rem, v, memo); | |
if lastResult.is_empty() || lastResult[0] != -1 { | |
lastResult.push(*val); | |
if lastResult.len() < len { | |
result = lastResult; | |
len = result.len(); | |
} | |
} | |
} | |
memo.insert(targetSum, result); | |
return memo[&targetSum].clone(); | |
} | |
fn main() { | |
let v = vec![1, 2, 5, 25]; | |
let targetSum = 99; | |
let r = bestSum(targetSum, &v, &mut HashMap::new()); | |
println!("{:?}", r); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment