Browse Source

maximum subarray

Zhang Li 2 years ago
parent
commit
05320926cc
2 changed files with 34 additions and 0 deletions
  1. 33 0
      src/solutions/dp/maximum_subarray.rs
  2. 1 0
      src/solutions/dp/mod.rs

+ 33 - 0
src/solutions/dp/maximum_subarray.rs

@@ -0,0 +1,33 @@
+struct Solution;
+
+impl Solution {
+    pub fn max_sub_array(nums: Vec<i32>) -> i32 {
+        let n = nums.len();
+        let mut dp_i = nums[0];
+        let mut ans = dp_i;
+        for i in 1..n {
+            dp_i = nums[i].max(dp_i + nums[i]);
+            ans = ans.max(dp_i);
+        }
+        ans
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_case_1() {
+        let nums = vec![-2, 1, -3, 4, -1, 2, 1, -5, 4];
+        let res = Solution::max_sub_array(nums);
+        assert_eq!(res, 6);
+    }
+
+    #[test]
+    fn test_case_2() {
+        let nums = vec![5, 4, -1, 7, 8];
+        let res = Solution::max_sub_array(nums);
+        assert_eq!(res, 23);
+    }
+}

+ 1 - 0
src/solutions/dp/mod.rs

@@ -1,3 +1,4 @@
 mod jump_game_2;
 mod longest_valid_parentheses;
+mod maximum_subarray;
 mod trapping_train_water;