Compare commits

..

No commits in common. "d8c4583b1157193a195f646e2b54d7408e34a819" and "0af11c087de637fce5073bff545cfaeed9741f5c" have entirely different histories.

1 changed files with 15 additions and 9 deletions

View File

@ -1,19 +1,25 @@
struct Solution; struct Solution;
impl Solution { impl Solution {
pub fn count_max_or_subsets(nums: Vec<i32>) -> i32 { pub fn max_sum(mut nums: Vec<i32>) -> i32 {
let max_or = nums.iter().fold(0, |acc, &x| acc | x); nums.sort_by(|a,b| b.cmp(a));
let mut dp = vec![0;1<<nums.len()]; let mut last = nums[0];
for i in 0..nums.len() { let mut ans = nums[0];
for j in (1<<i)..(1<<(i+1)) { for i in 1..nums.len() {
dp[j] = dp[j - (1<<i)] | nums[i]; let t = nums[i];
if t <= 0 {
break
} }
if t == last {
continue;
}
last = t;
ans += t;
} }
dp.iter().filter(|x| **x == max_or ).count() as i32 ans
} }
} }
fn main() { fn main() {
let sl = Solution::count_max_or_subsets(vec![3,2,1,5]); let sl = Solution::max_sum(vec![-1,-2]);
println!("{}", sl); println!("{}", sl);
} }