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

宁波网站推广厂家排名网站名称怎么备案

宁波网站推广厂家排名,网站名称怎么备案,家具网站开发目的,模板网站 可以做推广吗给你一个整数数组 nums ,请你找出 nums 子集 按位或 可能得到的 最大值 ,并返回按位或能得到最大值的 不同非空子集的数目 。 如果数组 a 可以由数组 b 删除一些元素(或不删除)得到,则认为数组 a 是数组 b 的一个 子集…

给你一个整数数组 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

法一:通过位运算求出所有子集,然后计算每个子集按位或的结果:

class Solution {
public:int countMaxOrSubsets(vector<int>& nums) {int maxOrRes = 0;int maxOrResNum = 0;int maxSubsetNum = pow(2, nums.size());for (int i = 0; i < maxSubsetNum; ++i){int orRes = 0;for (int j = 0; j < nums.size(); ++j){if ((1 << j) & i){orRes |= nums[j];}}if (orRes > maxOrRes){maxOrRes = orRes;maxOrResNum = 1;}else if (orRes == maxOrRes){++maxOrResNum;}}return maxOrResNum;}
};

如果nums中有n个元素,此算法时间复杂度为O(n2 n ^n n),空间复杂度为O(1)。

法二:同法一,但通过递归来找所有子集:

class Solution {
public:int countMaxOrSubsets(vector<int>& nums) {int ans = 0;findSubsets(nums, 0, ans, 0);return ans;}private:int curOrRes = 0;int curMaxSubsetOrRes = 0;void findSubsets(const vector<int> &nums, int index, int &ans,int curSubsetOrRes){if (index == nums.size()){if (curSubsetOrRes > curMaxSubsetOrRes){curMaxSubsetOrRes = curSubsetOrRes;ans = 1;}else if (curSubsetOrRes == curMaxSubsetOrRes){++ans;}return;}findSubsets(nums, index + 1, ans, curSubsetOrRes);findSubsets(nums, index + 1, ans, curSubsetOrRes | nums[index]);}
};

如果nums中有n个元素,此算法时间复杂度为O(n2 n ^n n),空间复杂度为O(n)。

法三:类似法一,我们用数字中值为1的位来表示nums中被选中到该数字表示的子集中的数在nums中的下标,但这次我们用动态规划来实现:

class Solution {
public:int countMaxOrSubsets(vector<int>& nums) {int subsetNum = 1 << nums.size();vector<int> dp(subsetNum);// 处理子集中只有1个数字时的按位或,此时按位或为该数字本身for (int i = 0; i < nums.size(); ++i){dp[1 << i] = nums[i];}int ans = 0;int max = 0;for (int i = 1; i < subsetNum; ++i){int lowbit = i & -i;// dp[i - lowbit]就是去除lowbit后的数字表示的子集// dp[lowbit]是lowbit表示的子集,显然lowbit只有一位// 结果就是i - lowbit表示的子集与lowbit表示的子集的与dp[i] = dp[i - lowbit] | dp[lowbit];if (dp[i] > max){max = dp[i];ans = 1;}else if (dp[i] == max){++ans;}}return ans;}
};

如果nums中有n个元素,此算法时间复杂度为O(2 n ^n n),空间复杂度为O(2 n ^n n)。相比法一,是用空间换时间。

http://www.yayakq.cn/news/487026/

相关文章:

  • 番禺建设网站平台 中国人免费观看
  • 上饶专业做网站建设微信微网站统计
  • 新吴区推荐做网站电话海安企业网站建设
  • 个人建站哪类站赚钱深圳住建厅官方网站
  • 赣州做网站优化游戏网站模
  • 网站集约化建设会议议程学校网站建设汇报ppt模板
  • 阿里巴巴国际站跨境电商平台传统媒体网站建设
  • 站群网站内容wordpress资讯cms主题
  • 如何查看网站做没做百度推广数据调查的权威网站
  • 深圳网站建设软件开发公司排名音乐图书馆网站建设
  • 做网站后台要学什么办一个网站要多少钱
  • 在线做logo印章网站西安广告设计公司有哪些
  • 单页购物网站源码如何在文本上做网站链接符号
  • 有优惠券网站 怎么做代理黄页88网注册
  • 校园网站建设背景需要企业网站开发
  • 福田做商城网站建设哪家便宜开发app流程
  • 各大网站有哪些深圳企业建设网站
  • 国外做婚纱摄影店设计的网站wordpress自定义seo标题
  • 移动网站建设可信赖推广普通话手抄报模板
  • 淘宝上做网站行吗网络设计工资多少
  • 河南电力建设工程公司网站深圳临时工最新招聘信息
  • 宜春网站建设wordpress汉字验证码插件
  • 网站描述技巧学院网站建设项目的成本计划书
  • 做地方黄页网站怎么建设淘宝那样的网站
  • php与H5做网站在龙港网站哪里做
  • 网站建设优秀网站建销售类网站开发架构
  • 中国最大网站建设公司网站首页页面设计多少钱
  • 北京网站建设第一品牌中职电子商务网站建设与维护考试题
  • 国内网站建设联系电话网站流量指数
  • 懒人模板网站网站建设管理要求