3287. 求出数组中最大序列值

一、原题链接

链接: 3287. 求出数组中最大序列值

给你一个整数数组 nums 和一个 正 整数 k 。定义长度为 2 * x 的序列 seq 的值为:
(seq[0] OR seq[1] OR … OR seq[x - 1]) XOR (seq[x] OR seq[x + 1] OR … OR seq[2 * x - 1]).
请你求出 nums 中所有长度为 2 * k 的 子序列的最大值 。

示例 1:
输入:nums = [2,6,7], k = 1
输出:5
解释:子序列 [2, 7] 的值最大,为 2 XOR 7 = 5 。

示例 2:
输入:nums = [4,2,5,6,7], k = 2
输出:2
解释:子序列 [4, 5, 6, 7] 的值最大,为 (4 OR 5) XOR (6 OR 7) = 2 。

二、题干是什么意思?

位运算

OR

OR是按位或运算,对于每一对对应的二进制位,只要其中一个是1,结果就是1,否则是0。

举例

5 OR 3。5的二进制是101,3的二进制是011,按位OR结果是111,也就是7。

XOR

XOR是按位异或运算,对于每一对对应的二进制位,只有两个二进制位不同时,结果才为1,否则为0。

举例

5 XOR 3。5的二进制为101,3的二进制是011,按位异或的结果是110,即6。

输入nums = [2,6,7], k = 1

子序列的长度为2 * k = 2,即我们需要从nums中找出所有长度为2的子序列。
可选的子序列有[2,6], [2,7], [6,7].
对于每一个子序列,计算它们的值:

对于子序列[2,6]

2 OR 6 = 010 OR 110 = 110 = 6
2 XOR 6 = 010 XOR 110 = 100 = 4

对于子序列[2,7]

2 OR 7 = 010 OR 111 = 111 = 7
2 XOR 7 = 010 XOR 111 = 101 = 5

对于子序列[6,7]

6 OR 7 = 110 OR 111 = 111 = 7
6 XOR 7 = 110 XOR 111 = 001 = 1

比较XOR的值

分别为4, 5, 1,题目要求最大的,即5。

三、代码

略,请看官方题解或者灵茶山艾府。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值