---
# System prepended metadata

title: 136. Single Number
tags: [Leetcode, bit, python, c++, Top 100 Liked Questions, easy]

---

###### tags: `Leetcode` `easy` `bit` `python` `c++` `Top 100 Liked Questions`

# 136. Single Number

## [題目出處:] https://leetcode.com/problems/single-number/

## 題目:
Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.

You must implement a solution with a **linear runtime complexity** and **use only constant extra space.**

## 解題思考:
使用XOR ^

| Expression1 | Expression2 | Result |
|:-----------:|:-----------:|:------:|
|      1      |      0      |   1    |
|      0      |      1      |   1    |
|      0      |      0      |   0    |
|      1      |      1      |   0    |

自己^自己=0
任何數^0=任何數自己

## Python:
``` python=
#linear runtime complexity
#use only constant extra space.
class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        #此方法對 但有用到額外array 🤡
        '''
        ans = []
        for i in range(len(nums)):
            if ans.__contains__(nums[i]):
                ans.remove(nums[i])
            else:
                ans.append(nums[i])
        return ans[0]
        '''
        #正解: 用XOR -> a^b
        res=0
        for val in nums:
            res^=val
        return res

if __name__ == '__main__':
    result = Solution()
    nums = [4,1,2,1,2]
    ans = result.singleNumber(nums)
    print(ans)
```

## C++:
``` cpp=
#include<iostream>
#include<vector>
using namespace std;

class Solution{
public:
    int singleNumber(vector<int>& nums){
        int ans=0;
        for (int val:nums){
            ans^=val;
        }
        return ans;
    }
};

int main(){
    vector<int> nums={4,1,2,1,2};
    Solution res;
    int ans=res.singleNumber(nums);
    cout<<ans<<endl;
    return 0;
}

```