1. 程式人生 > 其它 >劍指offer03:陣列中的重複數字

劍指offer03:陣列中的重複數字

劍指offer03:陣列中的重複數字

2022/4/18晚22:11開始自己的leetcode刷題之旅,python沖沖衝。

題目:

在一個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意一個重複的數字。

輸入:

[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3 

連結:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof

第一次用python寫資料結構的題目,之前都用的c++,還不太會,直接去看答案,學習思路。

思路分析:

  • 利用資料結構特點,容易想到使用雜湊表(Set)記錄陣列的各個數字,當查詢到重複數字則直接返回。
  • 如果沒有重複元素,則將新元素新增入set,繼續迴圈。
  • 因為題目說的是返回任意一個重複數字,所以找到一個直接return了。

程式碼分析:

  • dic = set()
    set() 函式建立一個無序不重複元素集,其實就是建立了一個集合,集合中的元素不允許重複。

答案:

class Solution:
    def findRepeatNumber(self, nums: [int]) -> int:
        dic = set()
        for num in nums:
            if num in dic: return num
            dic.add(num)
        return -1