2429. 最小异或
题目描述
给你两个正整数 num1
和 num2
,找出满足下述条件的正整数 x
:
x
的置位数和num2
相同,且x XOR num1
的值 最小
注意 XOR
是按位异或运算。
返回整数 x
。题目保证,对于生成的测试用例, x
是 唯一确定 的。
整数的 置位数 是其二进制表示中 1
的数目。
示例 1:
输入:num1 = 3, num2 = 5 输出:3 解释: num1 和 num2 的二进制表示分别是 0011 和 0101 。 整数 3 的置位数与 num2 相同,且 3 XOR 3 = 0 是最小的。
示例 2:
输入:num1 = 1, num2 = 12 输出:3 解释: num1 和 num2 的二进制表示分别是 0001 和 1100 。 整数 3 的置位数与 num2 相同,且 3 XOR 1 = 2 是最小的。
提示:
1 <= num1, num2 <= 109
解法
方法一:贪心 + 位运算
根据题目描述,我们先求出 \(num2\) 的置位数 \(cnt\),然后从高位到低位枚举 \(num1\) 的每一位,如果该位为 \(1\),则将 \(x\) 的对应位设为 \(1\),并将 \(cnt\) 减 \(1\),直到 \(cnt\) 为 \(0\)。如果此时 \(cnt\) 仍不为 \(0\),则从低位开始将 \(num1\) 的每一位为 \(0\) 的位置设为 \(1\),并将 \(cnt\) 减 \(1\),直到 \(cnt\) 为 \(0\)。
时间复杂度 \(O(\log n)\),空间复杂度 \(O(1)\)。其中 \(n\) 为 \(num1\) 和 \(num2\) 的最大值。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
方法二
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|