题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
空间复杂度O(n),用哈希表记录一下即可。
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param numbers int整型一维数组 # @return int整型 # class Solution: def duplicate(self , numbers: List[int]) -> int: # write code here cnt = [0] * 10010 for num in numbers: if cnt[num] > 0: return num else: cnt[num] += 1 return -1
空间复杂度O(1):
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param numbers int整型一维数组 # @return int整型 # class Solution: def duplicate(self , numbers: List[int]) -> int: # write code here if not numbers: return -1 for n in numbers: if n < 0 or n >= len(numbers): return -1 for i in range(len(numbers)): while numbers[i] != i: if numbers[i] == numbers[numbers[i]]: return numbers[i] temp = numbers[i] numbers[i] = numbers[temp] numbers[temp] = temp
py小朋友注意下交换两个变量的值,这里不可以用numbers[i], numbers[numbers[i]] = numbers[numbers[i]], numbers[i]。
看这样一个例子,上面列表交换l[0]和l[0]下标位置的两个元素。应该是2和4互换,但其实不是这样的。
首先计算出赋值号右边的内容(4, 2),然后依次赋值给左侧。
首先l[0] = 4,之后再赋值l[l[0]],这时赋值的是l[4],也就是数字6的位置,就会出现上述问题。