# [136. 只出现一次的数字](https://leetcode.cn/problems/single-number) [English Version](/solution/0100-0199/0136.Single%20Number/README_EN.md) ## 题目描述 <!-- 这里写题目描述 --> <p>给你一个 <strong>非空</strong> 整数数组 <code>nums</code> ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。</p> <p>你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。</p> <div class="original__bRMd"> <div> <p> </p> <p><strong class="example">示例 1 :</strong></p> <pre> <strong>输入:</strong>nums = [2,2,1] <strong>输出:</strong>1 </pre> <p><strong class="example">示例 2 :</strong></p> <pre> <strong>输入:</strong>nums = [4,1,2,1,2] <strong>输出:</strong>4 </pre> <p><strong class="example">示例 3 :</strong></p> <pre> <strong>输入:</strong>nums = [1] <strong>输出:</strong>1 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li><code>1 <= nums.length <= 3 * 10<sup>4</sup></code></li> <li><code>-3 * 10<sup>4</sup> <= nums[i] <= 3 * 10<sup>4</sup></code></li> <li>除了某个元素只出现一次以外,其余每个元素均出现两次。</li> </ul> </div> </div> ## 解法 <!-- 这里可写通用的实现逻辑 --> **方法一:位运算** 异或运算的性质: - 任何数和 $0$ 做异或运算,结果仍然是原来的数,即 $x \oplus 0 = x$; - 任何数和其自身做异或运算,结果是 $0$,即 $x \oplus x = 0$; 我们对该数组所有元素进行异或运算,结果就是那个只出现一次的数字。 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 是数组 $nums$ 的长度。 <!-- tabs:start --> ### **Python3** <!-- 这里可写当前语言的特殊实现逻辑 --> ```python class Solution: def singleNumber(self, nums: List[int]) -> int: return reduce(xor, nums) ``` ### **Java** <!-- 这里可写当前语言的特殊实现逻辑 --> ```java class Solution { public int singleNumber(int[] nums) { int ans = 0; for (int v : nums) { ans ^= v; } return ans; } } ``` ```java class Solution { public int singleNumber(int[] nums) { return Arrays.stream(nums).reduce(0, (a, b) -> a ^ b); } } ``` ### **C++** ```cpp class Solution { public: int singleNumber(vector<int>& nums) { int ans = 0; for (int v : nums) { ans ^= v; } return ans; } }; ``` ### **Go** ```go func singleNumber(nums []int) (ans int) { for _, v := range nums { ans ^= v } return } ``` ### **JavaScript** ```js /** * @param {number[]} nums * @return {number} */ var singleNumber = function (nums) { return nums.reduce((a, b) => a ^ b); }; ``` ### **TypeScript** ```ts function singleNumber(nums: number[]): number { return nums.reduce((r, v) => r ^ v); } ``` ### **Rust** ```rust impl Solution { pub fn single_number(nums: Vec<i32>) -> i32 { nums.into_iter() .reduce(|r, v| r ^ v) .unwrap() } } ``` ### **C** ```c int singleNumber(int* nums, int numsSize) { int ans = 0; for (int i = 0; i < numsSize; i++) { ans ^= nums[i]; } return ans; } ``` ### **Swift** ```swift class Solution { func singleNumber(_ nums: [Int]) -> Int { return nums.reduce(0, ^) } } ``` ### **C#** ```cs public class Solution { public int SingleNumber(int[] nums) { return nums.Aggregate(0, (a, b) => a ^ b); } } ``` ### **...** ``` ``` <!-- tabs:end -->