From c6c91fc81acc48ca717688a35bc36aadf21be9ea Mon Sep 17 00:00:00 2001 From: jackfiled Date: Sun, 21 Jan 2024 16:41:47 +0800 Subject: [PATCH] 20240121 Finished --- src/problem/mod.rs | 3 +- src/problem/p410_split_array_largest_sum.rs | 67 +++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/problem/p410_split_array_largest_sum.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index bfcc23c..4299d51 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -22,4 +22,5 @@ mod p2719_count_of_integers; mod p2744_find_maximum_number_of_string_pairs; mod p2171_removing_minimum_number_of_magic_beans; mod p2809_minimum_time_to_make_array_sum_at_most_x; -mod p2788_split_strings_by_separator; \ No newline at end of file +mod p2788_split_strings_by_separator; +mod p410_split_array_largest_sum; \ No newline at end of file diff --git a/src/problem/p410_split_array_largest_sum.rs b/src/problem/p410_split_array_largest_sum.rs new file mode 100644 index 0000000..17f594c --- /dev/null +++ b/src/problem/p410_split_array_largest_sum.rs @@ -0,0 +1,67 @@ +/** + * [410] Split Array Largest Sum + */ +pub struct Solution {} + + +// submission codes start here + +impl Solution { + fn check(nums: &Vec, value: i64, m: i32) -> bool { + let mut sum = 0i64; + let mut count = 1; + + for i in nums { + let i = *i as i64; + + if i + sum > value { + sum = i; + count += 1; + } else { + sum += i; + } + } + + count <= m + } + + pub fn split_array(nums: Vec, k: i32) -> i32 { + let mut right = 0i64; + let mut left = i64::MIN; + + for i in &nums { + let i = *i as i64; + + if i > left { + left = i; + } + right += i; + } + + while left < right { + let mid = (left + right) / 2; + + if Solution::check(&nums, mid, k) { + right = mid; + } else { + left = mid + 1; + } + } + + left as i32 + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_410() { + assert_eq!(Solution::split_array(vec![7,2,5,10,8], 2), 18); + assert_eq!(Solution::split_array(vec![1,2,3,4,5], 2), 9); + assert_eq!(Solution::split_array(vec![1,4,4], 3), 4); + } +}