diff --git a/src/main.rs b/src/main.rs index ed1f9dd..95ba5e1 100644 --- a/src/main.rs +++ b/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>, 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; - } - } - 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; - } - } - } + pub fn max_subarray_sum(nums: Vec, 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; } - 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() { - 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); }