2044.统计按位或能得到最大值的子集数目-python
2044.统计按位或能得到最大值的子集数目(中等)
给你一个整数数组 nums
,请你找出 nums
子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。
如果数组 a
可以由数组 b
删除一些元素(或不删除)得到,则认为数组 a
是数组 b
的一个 子集 。如果选中的元素下标位置不一样,则认为两个子集 不同 。
对数组 a
执行 按位或 ,结果等于 a[0] OR a[1] OR ... OR a[a.length - 1]
(下标从 0 开始)。
题目
给你一个整数数组 nums
,请你找出 nums
子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。
如果数组 a
可以由数组 b
删除一些元素(或不删除)得到,则认为数组 a
是数组 b
的一个 子集 。如果选中的元素下标位置不一样,则认为两个子集 不同 。
对数组 a
执行 按位或 ,结果等于 a[0] OR a[1] OR ... OR a[a.length - 1]
(下标从 0 开始)。
示例1:
1 |
|
示例2:
1 |
|
示例3:
1 |
|
提示:
1 <= nums.length <= 16
1 <= nums[i] <= 10^5
分析和解答
典型的 2^n
暴力遍历题目,题目里给的提示 16
也代表了这个意思, 2^16 = 65536
;
如果是每日一题的话就先不用回溯搞了,回溯好像是dfs分为取和不取的两个分支往下dfs,写起来稍微有点麻烦;
大佬的提醒下不用做什么哈希表了,在迭代判断的过程中直接记录 max
,然后出现新的更大的 refresh
掉那个 cnt
、没出现新的然后等于 max
的直接 cnt+=1
这样就可以了。
1 |
|
2044.统计按位或能得到最大值的子集数目-python
http://example.com/2022/03/15/algorithms/leetcode-python/2044-统计按位或能得到最大值的子集数目-python/