- 448. 找到数组中所有缺失的数字(Easy)/ 41. (无序数组中)缺失的第一个正数(H)/ 1060.(有序数组中)缺失的第 K 个数(H)/ 442. 【1~N中】出现 2 次的数(M)
【题目链接】
class Solution:
### 1117 哈希表(68 ms,22.6 MB)
def findRepeatNumber(self, nums: List[int]) -> int:
st = set()
for num in nums:
if num in st: return num # 若哈希表中已存在当前元素,则返回重复值
st.add(num)
return -1
### 1117 原地置换(36 ms,22.5 MB)
def findRepeatNumber(self, nums: List[int]) -> int:
# 初始化下标idx为数组的第一个元素
idx = 0
# 当下标不越界时,进行循环
while idx < len(nums):
# 若当前下标已指向的对应的元素(第一次对应),则继续检查下一个下标
if nums[idx] == idx:
idx += 1
continue
# 若当前元素是第二次指向对应的元素,则出现重复,返回此重复值
if nums[nums[idx]] == nums[idx]: return nums[idx]
# 交换索引为 idx 和 nums[idx] 的元素值,将此数字交换至对应索引位置
nums[nums[idx]], nums[idx] = nums[idx], nums[nums[idx]] #
return -1