2044. 统计按位或能得到最大值的子集数目

This commit is contained in:
li-chx 2025-07-28 11:18:09 +08:00
parent ca0e9fdd9e
commit d8c4583b11
1 changed files with 8 additions and 26 deletions

View File

@ -1,37 +1,19 @@
struct Solution; struct Solution;
impl Solution { impl Solution {
pub fn count_hill_valley(nums: Vec<i32>) -> i32 { pub fn count_max_or_subsets(nums: Vec<i32>) -> i32 {
let mut down = false; let max_or = nums.iter().fold(0, |acc, &x| acc | x);
for i in 1..nums.len() { let mut dp = vec![0;1<<nums.len()];
if nums[i] != nums[0]{ for i in 0..nums.len() {
down = nums[i] < nums[0]; for j in (1<<i)..(1<<(i+1)) {
break; dp[j] = dp[j - (1<<i)] | nums[i];
} }
} }
let mut ans = 0; dp.iter().filter(|x| **x == max_or ).count() as i32
for i in 2..nums.len() {
if nums[i] == nums[i-1]
{
continue;
}
if down && nums[i] >nums[i-1]
{
ans += 1;
down = false;
continue;
}
if !down && nums[i] < nums[i-1] {
ans += 1;
down = true;
continue;
}
}
ans
} }
} }
fn main() { 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); println!("{}", sl);
} }