KK's blog

每天积累多一些

0%

LeetCode 136 Single Number

LeetCode

<div>

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.

Example 1:

<pre>Input: nums = [2,2,1] Output: 1 </pre>

Example 2:

<pre>Input: nums = [4,1,2,1,2] Output: 4 </pre>

Example 3:

<pre>Input: nums = [1] Output: 1 </pre>

Constraints:

  • 1 <= nums.length <= 3 * 10<sup>4</sup>
  • -3 * 10<sup>4</sup> <= nums[i] <= 3 * 10<sup>4</sup>
  • Each element in the array appears twice except for one element which appears only once.

</div>

题目大意:

数列中,所有数都出现两次除了一个数,求这一个数

异或解题思路(推荐):

Easy题

解题步骤:

N/A

注意事项:

Python代码:

1
2
3
4
5
def singleNumber(self, nums: List[int]) -> int:
res = 0
for n in nums:
res ^= n
return res

算法分析:

时间复杂度为O(n),空间复杂度O(1)


HashMap算法II解题思路:

记录频数,最直观解法

Python代码:

1
2
3
def singleNumber2(self, nums: List[int]) -> int:
num_to_count = collections.Counter(nums)
return [n for n, count in num_to_count.items() if count == 1][0]

算法分析:

时间复杂度为O(n),空间复杂度O(n)


Math算法III解题思路:

用set求单一元素和乘以2减去原数组的和

Python代码:

1
2
def singleNumber3(self, nums: List[int]) -> int:
return 2 * sum(set(nums)) - sum(nums)

算法分析:

时间复杂度为O(n),空间复杂度O(n)

Free mock interview