参考https://leetcode.com/discuss/52757/16ms-c-solution
| 结论:异或相同的数两次等于本身,即相同的数产生的异或作用会被抵消 |
大概的思路:
1、make a filter
2、取出相应位不为0的数
3、再算出另一个数
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
//make a filter
int xory = 0;
for(int i = 0; i < nums.size(); i++)
xory ^= nums[i];
int lowestBit = xory & (~(xory - 1));
//fetch the one whose certain bit is not 0
int x = 0;
for(int i = 0; i < nums.size(); i++)
if(nums[i] & lowestBit)
x ^= nums[i];
int y = xory ^ x;
vector<int> result;
result.push_back(x);
result.push_back(y);
return result;
}
};
本文介绍了一种通过异或运算解决LeetCode特定问题的C语言算法,该算法能够快速准确地找出给定数组中仅出现一次的两个数。通过巧妙地利用异或操作的性质,实现代码简洁且执行效率高。
2508

被折叠的 条评论
为什么被折叠?



