pub struct Elements<'list> {
pub list: &'list [i32],
pub len: usize,
pub max_sum: Option<i32>,
}
impl<'list> Elements<'list> {
pub fn new(list: &'list [i32]) -> Self {
Elements {
list,
len: list.len(),
max_sum: None,
}
}
pub fn find_max_sum(&mut self) -> &Self {
let list: &[i32] = self.list;
let len: usize = self.len;
let mut temp_sum: i32 = list[0];
let mut max_sum: i32 = temp_sum;
for i in 1..len {
if temp_sum > 0 {
temp_sum += list[i];
} else {
temp_sum = list[i];
}
if temp_sum > max_sum {
max_sum = temp_sum;
}
}
self.max_sum = Some(max_sum);
self
}
pub fn result(&self) -> i32 {
self.max_sum.unwrap()
}
}