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

给你一个整数数组 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. 使用回溯法产生所有可能的子集
  2. 计算每个子集按位或的结果,比较出最大值
class Solution {List<List<Integer>> lists=new ArrayList<>();public void bc(int[] arr,int cur,LinkedList<Integer> list) {lists.add(new LinkedList<>(list));for(int i=cur;i<arr.length;i++){list.addLast(arr[i]);bc(arr, i+1, list);list.removeLast();}}public List<List<Integer>> subsetsWithDup(int[] nums) {bc(nums,0,new LinkedList<>());return lists;}public int countMaxOrSubsets(int[] nums) {int max=0;subsetsWithDup(nums);Map<Integer,Integer> map=new HashMap<>();for (List<Integer> integerList : lists) {int cur=0;for (Integer integer : integerList) {cur|=integer;}map.put(cur,map.getOrDefault(cur,0)+1);max=Math.max(cur,max);}return map.get(max);}
}

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

  1. LeetCode 2044. 统计按位或能得到最大值的子集数目(状态压缩DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 . 如果数组 a 可 ...

  2. python 实现统计ftp服务器指定目录下文件夹数目、文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏。 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小

    python 实现统计ftp服务器指定目录下文件夹数目.文件数目及所有文件大小 本次主要为满足应用方核对上传到ftp服务器的文件是否缺漏. 主要要求:指定目录下,文件夹数目/文件数目/所有文件大小,类 ...

  3. Mysql常用分组聚合函数(统计行的数量、最大值、最小值、平均值、求和)

    目录 一.概念 二.举例 2.1 COUNT函数 2.1.1 语法 2.1.2运行结果 2.2 AVG函数 2.2.1语法 2.2.2运行结果 2.3 SUM函数 2.3.1语法 2.3.2运行结果 ...

  4. oracle横向统计个数,Oracle横向求最大值

    由于最近在开发过程中,需要在Oracle中取横向栏位的最大值,在此介绍几个Oracle的函数给大家: 具体内容请内博客内文,如果对各位有所帮助,请留下痕迹! Oracle纵向取最大值函数为:max() ...

  5. leetcode题目整理

    1.面试先说出最简单的方法,然后在继续优化,不要想复杂,先暴力解决 2.理解问题,和面试交流题意 3.注意边界条件 4.不着急 一.二分 33.搜索旋转排序数组 153. 寻找旋转排序数组中的最小值 ...

  6. 回溯算法(持续更新)

    回溯算法的核心思想:回溯法是深度优先遍历中的一种特有现象,主要用于在一个较大的数据集中寻找满足特定条件的解.回溯法就是当前状态不满足条件时,就回到上一个状态,即回到过去,然后再次向下搜索.在此过程中, ...

  7. leetcode零散题汇总

    零散题 golang力扣leetcode 15.三数之和 golang力扣leetcode 128. 最长连续序列 golang力扣leetcode 1345.跳跃游戏IV golang力扣leetc ...

  8. 三月刷题笔记(C++)

    3-1 字形变换 -[Nm] 6. Z 字形变换 - 力扣(LeetCode) (leetcode-cn.com) 方法一:模拟 由于给定的字符串是按照z形保存,故按照特定顺序进行遍历. 其中 i 代 ...

  9. Leetcode每日一题总目录(动态更新。。。)

    0. 概要 leecode每日一题(也可能多题)题解跟踪记录及总目录. 常用算法解题思路和技巧及数据结构: 预处理:数组排序(954),哈希表... 双指针法 682,125,905 单向链表 2 双 ...

最新文章

  1. 被骗两次?黄仁勋骗过世界的14秒,英伟达押宝未来的元宇宙……
  2. Gif(1)-加载视图-交替圆效果
  3. CentOS7安装xfce桌面环境
  4. 王道考研 计算机网络6 OSI参考模型和各层作用
  5. Yolo系列知识点梳理(Yolov1-v5)
  6. java输入一串字符串反转_反转Java中的字符串
  7. 一次性搭建Hadoop高可用集群
  8. SQL Server 存储
  9. ROS安装教程(ubuntu16.04安装ROS Kinetic)
  10. 八爪鱼 八爪鱼采集器四大采集模式
  11. 计算机键盘换挡键,换挡键alt电脑键盘上的用处有哪些
  12. 腾讯笔试题——java题总结无答案
  13. 利用边长计算三角形面积 — 海伦公式推导过程
  14. 树莓派能否替代linux开发板,12 个可替代树莓派的单板机 | Linux 中国
  15. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git
  16. exe4j将jar转exe时出现的ClassNotFoundException解决办法
  17. 2种方式获取StreamingAssets下音频
  18. 原码、反码、补码的互相转换
  19. 最TOP小程序排行榜出炉
  20. 阿里巴巴联合欧莱雅发布移动端 AI 痘痘检测应用

热门文章

  1. 处理大并发之一 对epoll的理解,epoll客户端服务端代码
  2. System V IPC之信号灯
  3. #if/#else/#endif
  4. 九大经典算法之插入排序、希尔排序
  5. 用php生成HTML文件的类
  6. Squid 访问控制配置
  7. C/C++中计算函数运行时间
  8. 6/12 Sprint2 看板和燃尽图
  9. 一天一个类,一点也不累之HashSet
  10. oracle数据库用脚本运行SQL语句