题目概览
给你一个非空整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
提示:
1 <= nums.length <= 3 * 10^4-3 * 10^4 <= nums[i] <= 3 * 10^4- 除了某个元素只出现一次以外,其余每个元素均出现两次。
来源:136. 只出现一次的数字 - 力扣(LeetCode)
解题分析
方法:位运算
异或 是 相同为 0,不同为 1,因此当两个相同数做异或运算时会返回 0,一个数和 0 做异或运算时会返回 该数 本身。因此只需要将数组中所有元素一起做异或运算,得到的值一定是只出现一次的那个数。
时间复杂度:O(n)
空间复杂度:O(1)
class Solution { public int singleNumber(int[] nums) { int res = 0; for (int num: nums) { res ^= num; } return res; } }