欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > LeetCode 260. 只出现一次的数字 III

LeetCode 260. 只出现一次的数字 III

2025/4/3 6:23:51 来源:https://blog.csdn.net/m0_64381458/article/details/142373013  浏览:    关键词:LeetCode 260. 只出现一次的数字 III

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。
组队打卡,更多解法等你一起来参与哦!

LeetCode 260. 只出现一次的数字 III,难度中等

位运算

解题思路:

  • 根据相同的数字异或结果为 0 的特性,我们可以计算出两个只出现一次的数字异或的结果,但是还无法找到具体是哪两个数字。
  • 找出异或结果中任意一位为 1 的位置,利用这一位将数组分为两组;一组当前位为 0,另一组当前位为 1,这样两个只出现一次的数字会被分到不同的组中,其他所有成对的数字仍会被异或抵消为 0。
class Solution {public int[] singleNumber(int[] nums) {int[] result = new int[2];// 异或所有数字,得到两个不同数字的异或结果int xor = 0;for (int num : nums) {xor ^= num;}// 利用 xor & (-xor) 找出最低位的 1int diff = xor & (-xor);// 分组异或,num & diff 与运算区分出第 diff 位是否相同,进而将整个 num 分为两组for (int num : nums) {if ((num & diff) == 0) {result[0] ^= num;} else {result[1] ^= num;}}return result;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词