1.1 KiB
1.1 KiB
layout, title, last_solved, category, leetcode_url, status
| layout | title | last_solved | category | leetcode_url | status |
|---|---|---|---|---|---|
| page | Single Number II | 2020-06-22 | bit manipulation | https://leetcode.com/problems/single-number-ii | Attempted |
Problem
Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,3,2]
Output: 3
Example 2:
Input: [0,1,0,1,0,1,99]
Output: 99
Solution
If a number appears 3 times, then its sum of bits will be of the form 3 * n.
But if it only appears once, then it's sum of bits will be n.
So iterate thru all 32 bits of integers, adding their sums, mod it by 3 and the remaining will be the answer.
Let's take [2,2,3,2] for example.
0 1 0 | 2
0 1 0 | 2
0 1 0 | 2
1 0 0 | 3
---------------
1 3 0 sum of each digit column
1 % 3 => 1
3 % 3 => 0
0 % 0 => 0
The answer is 3
{% highlight python %}
{% endhighlight %}