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