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

数组中重复的数字

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的位置,就会出现上述问题。

全部评论

相关推荐

头像
05-13 11:19
C++
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务