leetcode

Description:

leetcode-448

Submission:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

class :
def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
d = {}
ans = []
for i in range(1, len(nums)+1):
d.setdefault(i, 0)
for num in nums:
d[num] += 1
for i in range(1, len(nums)+1):
if (d[i] == 0):
ans.append(i)
return ans

# O(N)时间复杂度,且最终返回的list不计入额外存储空间,因此是O(0)的空间复杂度
class :
def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
r = [*range(1, len(nums) + 1)]
for n in nums: r[n - 1] = 0
for i in range(len(r) - 1, -1, -1):
if not r[i]: r.pop(i)
return r

# 同上一解法
class :
def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
for n in nums:
nums[abs(n) - 1] = -abs(nums[abs(n) - 1])
return [i + 1 for i, n in enumerate(nums) if n > 0]

# 使用集合,很快,但是空间复杂度应该超过要求了
class :
def findDisappearedNumbers(self, nums: List[int]) -> List[int]:
uniq = set(nums)
all_num = set([i for i in range(1, len(nums)+1)])
return list(all_num - uniq)

Acceptance:

ac