3381. 长度可被 K 整除的子数组的最大元素和
This commit is contained in:
parent
1da8b6b735
commit
702b016368
37
src/main.rs
37
src/main.rs
|
|
@ -1,30 +1,27 @@
|
||||||
use crate::arr::make_matrix;
|
use std::cmp::max;
|
||||||
|
|
||||||
struct Solution;
|
struct Solution;
|
||||||
mod arr;
|
mod arr;
|
||||||
impl Solution {
|
impl Solution {
|
||||||
pub fn number_of_paths(grid: Vec<Vec<i32>>, k: i32) -> i32 {
|
pub fn max_subarray_sum(nums: Vec<i32>, k: i32) -> i64 {
|
||||||
let mut arr = vec![vec![vec![0; k as usize]; grid[0].len()]; grid.len()];
|
let mut temp = 0_i64;
|
||||||
let r#mod = 1e9 as i32 + 7;
|
let k = k as usize;
|
||||||
arr[0][0][(grid[0][0] % k) as usize] = 1;
|
let mut dp = vec![0_i64; nums.len()];
|
||||||
for i in 0..grid.len() {
|
let mut ans = 0_i64;
|
||||||
for j in 0..grid[i].len() {
|
for i in 0..k {
|
||||||
if i < grid.len() - 1 {
|
temp += nums[i] as i64;
|
||||||
for l in 0..k {
|
|
||||||
arr[i + 1][j][((l + grid[i + 1][j]) % k) as usize] = (arr[i + 1][j][((l + grid[i + 1][j]) % k) as usize] + arr[i][j][l as usize]) % r#mod;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if j < grid[0].len() - 1 {
|
|
||||||
for l in 0..k {
|
|
||||||
arr[i][j + 1][((l + grid[i][j + 1]) % k) as usize] = (arr[i][j + 1][((l + grid[i][j + 1]) % k) as usize] + arr[i][j][l as usize]) % r#mod;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
arr[grid.len() - 1][grid[0].len() - 1][0]
|
dp[k - 1] = temp;
|
||||||
|
ans = temp;
|
||||||
|
for i in k..nums.len() {
|
||||||
|
temp = temp + (nums[i] - nums[i - k]) as i64;
|
||||||
|
dp[i] = temp + if dp[i-k] > 0 { dp[i-k] } else { 0 };
|
||||||
|
ans = max(ans,dp[i]);
|
||||||
|
}
|
||||||
|
ans
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn main() {
|
fn main() {
|
||||||
let result = Solution::number_of_paths(make_matrix("[[5,2,4],[3,0,5],[0,7,2]]"), 3);
|
let result = Solution::max_subarray_sum(vec![-5,1,2,-3,4],2);
|
||||||
println!("{:?}", result);
|
println!("{:?}", result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue