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

云建站的正确步骤网站开发工程师中级高级

云建站的正确步骤,网站开发工程师中级高级,兼职做诚信网站认证,重庆餐饮品牌策划公司【LetMeFly】2680.最大或值:位运算 力扣题目链接:https://leetcode.cn/problems/maximum-or/ 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k 。每一次操作中,你可以选择一个数并将它乘 2 。 你最多可以进行 k 次操作&#…

【LetMeFly】2680.最大或值:位运算

力扣题目链接:https://leetcode.cn/problems/maximum-or/

给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k 。每一次操作中,你可以选择一个数并将它乘 2 。

你最多可以进行 k 次操作,请你返回 nums[0] | nums[1] | ... | nums[n - 1] 的最大值。

a | b 表示两个整数 a 和 b 的 按位或 运算。

 

示例 1:

输入:nums = [12,9], k = 1
输出:30
解释:如果我们对下标为 1 的元素进行操作,新的数组为 [12,18] 。此时得到最优答案为 12 和 18 的按位或运算的结果,也就是 30 。

示例 2:

输入:nums = [8,1,2], k = 2
输出:35
解释:如果我们对下标 0 处的元素进行操作,得到新数组 [32,1,2] 。此时得到最优答案为 32|1|2 = 35 。

 

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 109
  • 1 <= k <= 15

很不错的一道题!位运算的与或异或都考察了。

解题方法一:前缀和

首先需要发现并理解的是:一定要每次都将“二进制下位数最长的那个数乘2”。

假如a二进制下是3位,b二进制下是2位,那么将b乘以2后和a或运算还是3位,一定不如将a乘以2变成2位大。

二进制下长度最长的数有多个,如何选择呢?

无所谓,每个都试试呗。我们只需要逮着一个数一直乘以2共k次,判断所有选择中结果最大的那个就好了。

这一听不是 O ( n 2 ) O(n^2) O(n2)吗,如何优化?

使用一个前缀和 p r e f i x [ i ] prefix[i] prefix[i]代表从下标 0 0 0或到下标 i i i这个元素的结果,“后缀和” s u f f i x [ i ] suffix[i] suffix[i]代表从最后一个元素或到下标 i i i的结果。

那么,如果将 n u m s [ i ] nums[i] nums[i]乘以 k k k 2 2 2的话,最终的或结果就是 p r e f i x [ i − 1 ] ∣ n u m s [ i ] < < k ∣ s u f f i x [ i + 1 ] prefix[i - 1]\ |\ nums[i] << k\ |\ suffix[i + 1] prefix[i1]  nums[i]<<k  suffix[i+1]

所有的这些结果中,最大的那个即为答案。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-03-21 15:09:09* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-21 15:17:06*/
#ifdef _WIN32
#include "_[1,2]toVector.h"
#endiftypedef long long ll;class Solution {
public:ll maximumOr(vector<int>& nums, int k) {vector<int> suffix(nums.size() + 1);for (int i = nums.size() - 1; i >= 0; i--) {suffix[i] = suffix[i + 1] | nums[i];}ll ans = 0;int prefix = 0;for (int i = 0; i < nums.size(); i++) {ans = max(ans, (ll)(nums[i]) << k | prefix | suffix[i + 1]);prefix |= nums[i];}return ans;}
};

解题方法二:位运算

方法一空间复杂度为 O ( n ) O(n) O(n),可否使用位运算优化?例如我单独将 n u m s [ i ] nums[i] nums[i]拎出来左移 k k k次的话,如何在 O ( 1 ) O(1) O(1)空间下快速判断出剩下所有元素的或值为多少?

假设数组中所有元素或运算的结果为 a l l O r allOr allOr

  • 对于 n u m s [ i ] nums[i] nums[i]二进制下的某个 1 1 1,如果其他元素中这一位也有出现过 1 1 1,那么拎出来 n u m s [ i ] nums[i] nums[i]后剩下元素这一位的或结果和 a l l O r allOr allOr相同

  • 对于 n u m s [ i ] nums[i] nums[i]二进制下的某个 1 1 1,如果其他元素中这一位没有出现过 1 1 1,那么拎出来 n u m s [ i ] nums[i] nums[i]后剩下元素这一位的或结果和 a l l O r allOr allOr不同

也就是说,我们只需要统计一下哪一位 1 1 1出现过最少两次( a l l 1 all1 all1 1 1 1的位代表至少有两个数这一位为 1 1 1),如果 n u m s [ i ] nums[i] nums[i]这一位为 1 1 1的话,依据 a l l 1 all1 all1的这一位是否为 1 1 1,就能判断出其他元素中是否存在这一位为 1 1 1的情况,就能得知除 n u m s [ i ] nums[i] nums[i]外其他元素这一位或运算的结果是否为 1 1 1了。

最后就剩下了一个问题:如何求出 a l l 1 all1 all1

同样使用前缀和的思路, p r e f i x prefix prefix代表从第一个元素到当前元素的上一个元素为止的或结果。

如果那么 p r e f i x & n u m s [ i ] prefix\ \&\ nums[i] prefix & nums[i]的某一位为 1 1 1的话,就代表 n u m s [ i ] nums[i] nums[i]和前面的数中的某些数这一位都为 1 1 1,也就是说这一位至少出现了两次 1 1 1

因此将 a l l 1 all1 all1或上 p r e f i x & n u m s [ i ] prefix\ \&\ nums[i] prefix & nums[i]即可。

这样,遍历到 n u m s [ i ] nums[i] nums[i]时, a l l O r ˆ n u m s [ i ] ∣ a l l 1 allOr\ \^\ nums[i]\ |\ all1 allOr  ˆnums[i]  all1即为所有元素除去 n u m s [ i ] nums[i] nums[i]后的或结果。

  • 时间复杂度 O ( l e n ( n u m s ) ) O(len(nums)) O(len(nums))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-03-21 15:29:27* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-21 15:32:32* @Descriptions: Fake Time* @Descriptions: AC,100.00%,90.30%*/
typedef long long ll;class Solution {
public:ll maximumOr(vector<int>& nums, int k) {int allOr = 0, all1 = 0;for (int t : nums) {all1 |= allOr & t;allOr |= t;}ll ans = 0;for (int t : nums) {ans = max(ans, allOr ^ t | all1 | (ll)(t) << k);}return ans;}
};
Python
'''
Author: LetMeFly
Date: 2025-03-21 15:21:19
LastEditors: LetMeFly.xyz
LastEditTime: 2025-03-21 15:27:03
'''
from typing import Listclass Solution:def maximumOr(self, nums: List[int], k: int) -> int:allOr = all1 = 0for t in nums:all1 |= t & allOrallOr |= tans = 0for t in nums:ans = max(ans, t ^ allOr | all1 | t << k)return ans
Java
/** @Author: LetMeFly* @Date: 2025-03-21 15:32:20* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-21 15:34:12*/
class Solution {public long maximumOr(int[] nums, int k) {int allOr = 0, all1 = 0;for (int t : nums) {all1 |= t & allOr;allOr |= t;}long ans = 0;for (int t : nums) {ans = Math.max(ans, allOr ^ t | all1 | (long)t << k);}return ans;}
}
Go
/** @Author: LetMeFly* @Date: 2025-03-21 15:34:47* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-03-21 16:32:51* @Description: Go int和int64的位运算似乎几乎一点都不会自动转换类型*/
package mainfunc maximumOr(nums []int, k int) (ans int64) {allOr, all1 := 0, 0for _, t := range nums {all1 |= allOr & tallOr |= t}for _, t := range nums {ans = max(ans, int64(allOr) ^ int64(t) | int64(all1) | int64(t) << k)}return
}

End

说实话感觉这次官解写的不错,灵神有待加油啊。

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源


文章转载自:

http://djguaghY.nqmwk.cn
http://8C2ojwq6.nqmwk.cn
http://0gdNE56l.nqmwk.cn
http://juvphFQq.nqmwk.cn
http://7jSHLxlD.nqmwk.cn
http://XLokd6Ku.nqmwk.cn
http://tydzf5Lv.nqmwk.cn
http://C1mxpe8A.nqmwk.cn
http://oHBrwshb.nqmwk.cn
http://mrbKUz6P.nqmwk.cn
http://rblOdc0T.nqmwk.cn
http://JHvwp1yz.nqmwk.cn
http://kaD5SJQK.nqmwk.cn
http://y3x5CfVz.nqmwk.cn
http://wkMmLsNA.nqmwk.cn
http://jPfZxcKE.nqmwk.cn
http://IHWa6kaF.nqmwk.cn
http://7BIVBl5T.nqmwk.cn
http://CmY3SXF9.nqmwk.cn
http://ZVjEaMSh.nqmwk.cn
http://1xY6Z4ok.nqmwk.cn
http://lRiFHz1z.nqmwk.cn
http://utIkVi1e.nqmwk.cn
http://GVNu4k1C.nqmwk.cn
http://LKzJvWUD.nqmwk.cn
http://MbJACMbK.nqmwk.cn
http://vcFf1fet.nqmwk.cn
http://ZAUuONn9.nqmwk.cn
http://uFXNfnuq.nqmwk.cn
http://vTW49hEi.nqmwk.cn
http://www.dtcms.com/wzjs/738119.html

相关文章:

  • 网站建设经验与团队wordpress如何增加产品类目
  • 四川省住房和城乡建设厅网站电话鲜花网站设计
  • 云南网站建设公司直播类网站开发
  • 网址与网站的区别网站建设的合同条款
  • 做展示网站要恋用什么程序视频网站建设方案书
  • 网站建设asp类似微薄利网站怎么做
  • c s网站开发模式南京微信网站建设哪家好
  • 玉环市建设局网站推荐大气的网站
  • 网站可以用什么语言开发做平价建网站
  • 深圳网站seo关键词广州做网站价格
  • 小型企业网站如何建设房子设计图软件app免费
  • 服装销售网站设计与制作嘉兴网站开发选哪家
  • 制作网站数据库招标网站平台有哪些
  • 企业网站建设合作协议书网络建设公司经营范围
  • 长沙银行网站建设国防教育网站建设说明书
  • 重庆金融公司网站建设济南自适应网站建设
  • 什么样的网站好优化设计联盟
  • wordpress资源购买插件沈阳专业seo排名优化公司
  • 商洛市住户和城乡建设局网站信息价给公司做网站 图片倾权
  • 深圳网站建站建设公司地址软件开发和研发的区别
  • 桂林市工程建设项目招标网站网站的底部设计
  • 宜昌市建设监理协会网站鞍山做网站团队
  • wordpress 相邻文章兰州关键词优化排名
  • 上海网站开发月薪多少钱凡科建的网站可以做seo吗
  • 手机触屏版网站网站关键词优化怎么弄
  • 做租凭网站是经营性吗网站开发下载
  • 专门教人做点心的网站wordpress下载类模板
  • 建设网站需要什么手续推广联盟
  • 北京网站开发网站建设咨询中国e网网站建设
  • 口碑好的网站建设公司哪家好店铺推广软文范例