当前位置: 首页 > backend >正文

位运算求最大值的子集数目问题

一、方法:位运算

二、我们再来看解题思路:

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

代码

Python3

class Solution:def countMaxOrSubsets(self, nums: List[int]) -> int:maxOr, cnt = 0, 0for 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, 1elif orVal == maxOr:cnt += 1return 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;}
};

C

int countMaxOrSubsets(int* nums, int numsSize){int n = numsSize, 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;
}

好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!

 

http://www.xdnf.cn/news/13136.html

相关文章:

  • Ace网络验证软件卡密系统-免费免搭建 记录整理
  • 如何让非 TCP/IP 协议驱动屏蔽 IPv4/IPv6 和 ARP 报文?
  • 搭建仿真yolo环境
  • Docker安装、基础知识、项目部署笔记
  • Ubuntu里面单独编译某一个模块
  • iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享
  • nacos开启鉴权密码登录
  • FFmpeg:Windows系统小白安装及其使用
  • R语言速释制剂QBD解决方案之三
  • 曼昆《经济学原理》第九版 第十一章公共物品与公共资源
  • WDK 10.0.19041.685,可在32位win7 sp1系统下搭配vs2019使用,可以编译出xp驱动。
  • 深度剖析OpenSSL心脏滴血漏洞与Struts2远程命令执行漏洞
  • DAP-seq测序(DNA亲和纯化测序)!
  • Python爬虫实战:研究Restkit库相关技术
  • 芯科科技Tech Talks技术培训重磅回归:赋能物联网创新,共筑智能互联未来
  • 在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
  • Python爬虫实战:研究feedparser库相关技术
  • MySQL中text,longtext,mediumtext区别
  • 数组合并方式
  • 深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
  • [C#]基于winform部署PP-OCRv5的推理模型paddleocrv5模型部署
  • 算法:模拟
  • 网格三面角,散射过程推导
  • Oracle11g安装包
  • 【Ubuntu崩溃修复】
  • 二叉树-144.二叉树的前序遍历-力扣(LeetCode)
  • sql server连接遇到的问题
  • 【Java_EE】Spring MVC
  • C#中LINQ技术:自然语言集成与统一数据操作的艺术
  • CSS 布局指南