题解 | #数组中重复的数字#

数组中重复的数字

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           


全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
团子请爱我一次_十月...:不是戈门,干哪来了,这就是java嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务