Skip to content

Commit 87da9b6

Browse files
authored
maximum subarray solution
1 parent 8468fd1 commit 87da9b6

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

maximum-subarray/yhkee0404.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
impl Solution {
2+
pub fn max_sub_array(nums: Vec<i32>) -> i32 {
3+
return Self::solve(&nums, 0, nums.len()).unwrap_or(0);
4+
}
5+
fn solve(nums: &Vec<i32>, l: usize, r: usize) -> Option<i32> {
6+
if l >= r {
7+
return None
8+
}
9+
if l + 1 == r {
10+
return Some(nums[l])
11+
}
12+
let mid = l + ((r - l) >> 1);
13+
let a = Self::solve(nums, l, mid);
14+
let b = Self::solve(nums, mid, r);
15+
if a.is_none() || b.is_none() {
16+
return a.or(b)
17+
}
18+
let mut ans = a.max(b);
19+
let mut c = 0;
20+
let mut d = 0;
21+
for i in (l..mid).rev() {
22+
c += nums[i];
23+
d = d.max(c);
24+
}
25+
if d == 0 {
26+
return ans
27+
}
28+
c = d;
29+
for i in mid..r {
30+
c += nums[i];
31+
d = d.max(c);
32+
}
33+
ans.max(Some(d))
34+
}
35+
}

0 commit comments

Comments
 (0)