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

简介: LeetCode-2044 统计按位或能得到最大值子集的数目

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/count-number-of-maximum-bitwise-or-subsets

题目描述

给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。

如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,则认为数组 a 是数组 b 的一个 子集 。如果选中的元素下标位置不一样,则认为两个子集 不同 。

对数组 a 执行 按位或 ,结果等于 a[0] OR a[1] OR ... OR a[a.length - 1](下标从 0 开始)。

 

示例 1:

输入:nums = [3,1]

输出:2

解释:子集按位或能得到的最大值是 3 。有 2 个子集按位或可以得到 3 :

- [3]

- [3,1]

示例 2:

输入:nums = [2,2,2]

输出:7

解释:[2,2,2] 的所有非空子集的按位或都可以得到 2 。总共有 23 - 1 = 7 个子集。

示例 3:

输入:nums = [3,2,1,5]

输出:6

解释:子集按位或可能的最大值是 7 。有 6 个子集按位或可以得到 7 :

- [3,5]

- [3,1,5]

- [3,2,5]

- [3,2,1,5]

- [2,5]

- [2,1,5]

 

提示:

1 <= nums.length <= 16

1 <= nums[i] <= 105

 

解题思路

观察数组最大规模仅仅16,直接使用暴力dfs枚举所有子集求得最大子集并统计数目。

代码展示

 

class Solution {
public:
    int miRet = 0;
    int miMax = 0;
    void dfs(int index, vector<int>& nums, int sum)
    {
        if(index == nums.size())
        {
            if(sum > miMax)
            {
                miRet = 1;
                miMax = sum;
            }
            else if(sum == miMax)
            {
                miRet++;
            }
        }
        else
        {
            dfs(index + 1, nums, sum);
            dfs(index + 1, nums, sum | nums[index]);
        }
    }
    int countMaxOrSubsets(vector<int>& nums) {
        dfs(0, nums, 0);
        return miRet;
    }
};

运行结果

 

相关文章
|
20天前
|
机器学习/深度学习 存储 算法
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
LeetCode题目 90:五种算法 回溯\迭代\位掩码\字典树\动态规划实现 子集ll
|
20天前
|
存储 机器学习/深度学习 算法
力扣78题:生成子集
力扣78题:生成子集
|
2月前
|
算法
"刷题记录:哈希表+双指针 | leetcode-2465. 不同的平均值数目 "
该文段是一篇关于编程题目的解答,主要讨论如何找到数组中所有不同平均值的个数。作者首先使用排序和哈希集来解决,将数组转为列表排序后,通过双指针计算平均值并存入哈希集以去重。然后,作者发现可以优化方案,通过双指针在排序后的数组中直接计算两数之和,用哈希集记录不重复的和,从而避免实际计算平均值,提高了算法效率。最终代码展示了这两种方法。
23 0
|
2月前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
2月前
|
算法
leetcode代码记录(子集
leetcode代码记录(子集
16 0
|
2月前
leetcode 2520 统计能整除数字的位数
leetcode 2520 统计能整除数字的位数
10 0
|
2月前
|
算法 测试技术 C#
【图论】【分类讨论】LeetCode3017按距离统计房屋对数目
【图论】【分类讨论】LeetCode3017按距离统计房屋对数目
|
2月前
leetcode2376. 统计特殊整数
leetcode2376. 统计特殊整数
21 1
|
2月前
|
存储
leetcode2744. 最大字符串配对数目
leetcode2744. 最大字符串配对数目
21 0
|
16天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题