题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
一次映射的重复性在二次映射中保留。
只有重复的k会导致:nums[k]<0,并且再次遇到。
为了保留一次映射的像或二次映射的原像,故需要来一次正负判断,将减去的值加回来。
class Solution:
def duplicate(self, numbers: List[int]) -> int:
n = len(numbers)
# i-> k-> numbers[k],构成了两次映射。只有k一样,才会导致numbers[k]<0,代表之前出现过,才会-n。这样就把这个k筛选出来了。
for i in range(n):
k = numbers[i]
# k在用作下标之前先+n恢复
if k < 0:
k += n
if numbers[k] < 0:
return k
numbers[k] -= n
return -1
360集团公司氛围 351人发布
