diff --git a/src/main.rs b/src/main.rs index 8f88470..679815f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,37 +1,19 @@ struct Solution; impl Solution { - pub fn count_hill_valley(nums: Vec) -> i32 { - let mut down = false; - for i in 1..nums.len() { - if nums[i] != nums[0]{ - down = nums[i] < nums[0]; - break; + pub fn count_max_or_subsets(nums: Vec) -> i32 { + let max_or = nums.iter().fold(0, |acc, &x| acc | x); + let mut dp = vec![0;1<nums[i-1] - { - ans += 1; - down = false; - continue; - } - if !down && nums[i] < nums[i-1] { - ans += 1; - down = true; - continue; - } - } - ans + dp.iter().filter(|x| **x == max_or ).count() as i32 } } fn main() { - let sl = Solution::count_hill_valley(vec![6,6,5,5,4,1]); + let sl = Solution::count_max_or_subsets(vec![3,2,1,5]); println!("{}", sl); }