Solution 1
根据题目的线性时间要求和常数空间要求,基于排序或者哈希表的方法都不能用了。
本来想使用之前的 0041. First Missing Positive 的桶哈希思路,但是本题还涉及到了负数因此没法用。
【参考官方】异或运算:在满足交换律和结合律的前提下,整个序列的异或运算和为只出现一次的数字。(这个对我是新的思路了……)
- 时间复杂度: O ( N ) O(N) O(N),其中 N N N为数字的个数,题目要求
- 空间复杂度: O ( 1 ) O(1) O(1),题目要求
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for (auto num: nums) ans ^= num;
return ans;
}
};
Solution 2
Solution 1的Python实现
class Solution:
def singleNumber(self, nums: List[int]) -> int:
# ans = 0
# for num in nums:
# ans ^= num
# return ans
ans = reduce(lambda acc, num: acc ^ num, nums)
return ans