【每日算法】LeetCode 136 —— 只出现一次的数字(二百二十六)

题目内容

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例

示例 1:

输入: [2,2,1]
输出: 1

示例 2:

输入: [4,1,2,1,2]
输出: 4

题解

本题考察位运算中的异或的思想。异或运算:在位运算中,两个相同的数异或,结果为0;两个不同数异或为1。同时满足交换律和结合律。因此,在本题中,只需要把全部的数进行异或运算,然后就可以求出来只出现一次的那个数。

具体请看代码。

代码

class Solution {
public:
int singleNumber(vector<int>& nums) {
for (int i = 1; i < nums.size(); i++)
nums[0] ^= nums[i];
return nums[0];
}
};
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/08/28/【每日算法】LeetCode-136-——-只出现一次的数字(二百二十六)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号