大致思路:循环遍历数组nums[],若下标 i 和值 m 相等说明该值在正确的位置上,若不等则交换,放到正确的位置上,在过程中出现目标位置上存在相同的数字时,说明找到重复值,返回即可。
时间复杂度O(n),空间复杂度O(1)
#time:2023-08-07 16:16
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param numbers int整型一维数组
# @return int整型
#
class Solution:
def duplicate(self , nums: List[int]) -> int:
# write code here
for i, num in enumerate(nums):
while nums[i] != i:
m = nums[i]
if nums[m] == m:
return m
else:
nums[i] = nums[m]
nums[m] = m
return -1
也可以用哈希表/哈希集合,用set来存储已经出现过的数值,当再出现时,返回重复值
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
num_set = set()
for num in nums:
if num in num_set:
return num
else:
num_set.add(num)
return -1