news 2026/7/21 17:27:55

统计按位或能得到最大值的子集数目(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
统计按位或能得到最大值的子集数目(二)

接上文,小编来分享解题思路:

解决方案

方法一:位运算

记 n 是数组 nums 的长度,数组中的每个元素都可以选取或者不选取,因此数组的非空子集数目一共有 (2n-1) 个。可以用一个长度为 n 比特的整数来表示不同的子集,在整数的二进制表示中,n 个比特的值代表了对数组不同元素的取舍。第 i 位值为 1 则表示该子集选取对应元素,第 i 位值为 0 则表示该子集不选取对应元素。求出每个子集的按位或的值,并计算取到最大值时的子集个数。

代码

Python3

class Solution: def countMaxOrSubsets(self, nums: List[int]) -> int: maxOr, cnt = 0, 0 for i in range(1, 1 << len(nums)): orVal = reduce(or_, (num for j, num in enumerate(nums) if (i >> j) & 1), 0) if orVal > maxOr: maxOr, cnt = orVal, 1 elif orVal == maxOr: cnt += 1 return cnt

Java

class Solution { public int countMaxOrSubsets(int[] nums) { int maxOr = 0, cnt = 0; for (int i = 0; i < 1 << nums.length; i++) { int orVal = 0; for (int j = 0; j < nums.length; j++) { if (((i >> j) & 1) == 1) { orVal |= nums[j]; } } if (orVal > maxOr) { maxOr = orVal; cnt = 1; } else if (orVal == maxOr) { cnt++; } } return cnt; } }

C#

public class Solution { public int CountMaxOrSubsets(int[] nums) { int maxOr = 0, cnt = 0; for (int i = 0; i < 1 << nums.Length; i++) { int orVal = 0; for (int j = 0; j < nums.Length; j++) { if (((i >> j) & 1) == 1) { orVal |= nums[j]; } } if (orVal > maxOr) { maxOr = orVal; cnt = 1; } else if (orVal == maxOr) { cnt++; } } return cnt; } }

C++

class Solution { public: int countMaxOrSubsets(vector<int>& nums) { int n = nums.size(), maxValue = 0, cnt = 0, stateNumber = 1 << n; for (int i = 0; i < stateNumber; i++) { int cur = 0; for (int j = 0; j < n; j++) { if (((i >> j) & 1) == 1) { cur |= nums[j]; } } if (cur == maxValue) { cnt++; } else if (cur > maxValue) { maxValue = cur; cnt = 1; } } return cnt; } };

复杂度分析

时间复杂度:O(2n×n) ,其中 n 是数组 nums 的长度。需要遍历 O(2n) 个状态,遍历每个状态时需要遍历 O(n) 位。

空间复杂度:O(1) 。仅使用常量空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 17:27:32

Chanlun-Pro缠论量化分析:从复杂理论到智能交易的终极解决方案

Chanlun-Pro缠论量化分析&#xff1a;从复杂理论到智能交易的终极解决方案 【免费下载链接】chanlun-pro 基于缠中说禅所讲缠论理论&#xff0c;以便量化分析市场行情的工具 项目地址: https://gitcode.com/gh_mirrors/ch/chanlun-pro 你是不是曾经面对复杂的K线图表感到…

作者头像 李华
网站建设 2026/7/21 17:27:06

【IEEE出版、EI检索】2026年数据与信息系统国际学术会议(DIS 2026)

2026年数据与信息系统国际学术会议&#xff08;DIS 2026&#xff09;将于2026年8月28日至30日在中国成都举行。本次会议旨在为全球数据科学、信息系统及相关领域的专家学者和行业从业者搭建高水平的国际交流平台&#xff0c;共同探讨前沿理论、关键技术突破与创新应用实践。 当…

作者头像 李华
网站建设 2026/7/21 17:26:20

RSpotify性能优化:提升Rust音乐应用的响应速度

RSpotify性能优化&#xff1a;提升Rust音乐应用的响应速度 【免费下载链接】rspotify Spotify Web API SDK implemented on Rust 项目地址: https://gitcode.com/gh_mirrors/rsp/rspotify RSpotify是一个基于Rust实现的Spotify Web API SDK&#xff0c;它为开发者提供了…

作者头像 李华
网站建设 2026/7/21 17:25:29

MagiskBoot深度解析:Android系统定制与Root权限实战指南

MagiskBoot深度解析&#xff1a;Android系统定制与Root权限实战指南 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk作为Android系统的"魔法面具"&#xff0c;为开发者提供了无系统修改…

作者头像 李华
网站建设 2026/7/21 17:24:15

GitHub功能大揭秘:AI代码创作、开发者工作流等一应俱全!

导航菜单可进行切换导航、登录、外观设置等操作。平台包含AI代码创作、开发者工作流、应用程序安全、探索等方面。AI代码创作有GitHub Copilot、GitHub Copilot应用、MCP注册表等&#xff1b;开发者工作流涵盖Actions、Codespaces等&#xff1b;应用程序安全包括GitHub高级安全…

作者头像 李华