使数组异或和等于 K 的最少操作次数
题目
2997. 使数组异或和等于 K 的最少操作次数 - 力扣(LeetCode)
给你一个下标从 0 开始的整数数组 nums
和一个正整数 k
。
你可以对数组执行以下操作 任意次 :
- 选择数组里的 任意 一个元素,并将它的 二进制 表示 翻转 一个数位,翻转数位表示将
0
变成1
或者将1
变成0
。
你的目标是让数组里 所有 元素的按位异或和得到 k
,请你返回达成这一目标的 最少 操作次数。
注意,你也可以将一个数的前导 0 翻转。比方说,数字 (101)2
翻转第四个数位,得到 (1101)2
。
示例 1:
1 | 输入:nums = [2,1,3,4], k = 1 |
示例 2:
1 | 输入:nums = [2,0,2,0], k = 0 |
提示:
1 <= nums.length <= 10^5
0 <= nums[i] <= 10^6
0 <= k <= 10^6
1 | class Solution { |
解题
让数组nums
里所有元素的按位异或后的结果,我们设为 res
。
res
等于k
,等价于二者异或后为0。因为对于异或操作来说,两个相同的数异或,结果为0。
因此我们可以让res
和k
进行异或得到ans
,然后看看ans
中有几个1,我们将这些1翻转为0即可。
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 翼同学的个人博客!
评论
ValineDisqus