一、原题链接
链接: 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。
三、代码
略,请看官方题解或者灵茶山艾府。