[137. Single Number II](https://leetcode.com/problems/single-number-ii/)
### 題目描述
Given an integer array `nums` where every element appears **three times** except for one, which appears **exactly once**. *Find the single element and return it.*
You must implement a solution with a linear runtime complexity and use only constant extra space.
### 範例
**Example 1:**
```
Input: nums = [2,2,3,2]
Output: 3
```
**Example 2:**
```
Input: nums = [0,1,0,1,0,1,99]
Output: 99
```
**Constraints**:
* 1 <= `nums.length` <= 3 * 10^4^
* -2^31^ <= `nums[i]` <= 2^31^ - 1
* Each element in `nums` appears exactly **three times** except for one element which appears **once**.
### 解答
#### Javascript
```javascript=
function singleNumber(nums) {
let ones = 0;
let twos = 0;
for (const num of nums) {
ones = (ones ^ num) & ~twos;
twos = (twos ^ num) & ~ones;
}
return ones;
}
```
> 看答案的,學習了,本來只會用hashmap,而且也會過ㄏㄏ,只是空間複雜度有差。
> [name=Marsgoat][time=4 July, 2023]
#### C#
```csharp=
public class Solution {
public int SingleNumber(int[] nums) {
int once = 0;
int twice = 0;
foreach(int num in nums) {
once = (once ^ num) & ~twice;
twice = (twice ^ num) & ~once;
}
return once;
}
}
```
> 看上面的,一開始有想到 XOR,但沒想到怎麼處理出現奇數次
> [name=Jim][time=Jul 5, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)