用 Python 查詢重複數字


假設我們有一個包含 n + 1 個整數的陣列 nums。成員範圍從 1 到 n。證明至少有一個重複數。假設只有一個重複數,我們必須找到重複的元素。因此,如果陣列形如 [1,3,4,2,2],則重複元素為 2。

要解決這個問題,我們將按照以下步驟操作:

  • a := nums[0] 且 b := nums[0]
  • while True
    • a := nums[nums[a]]
    • b := nums[b]
    • if a = b, 則退出迴圈
  • ptr := nums[0]
  • while ptr 不同於 b
    • ptr := nums[ptr]
    • b := nums[b]
  • 返回 ptr

我們看看以下實現來加深理解:

示例

即時演示

class Solution(object):
   def findDuplicate(self, nums):
      hare = nums[0]
      tortoise = nums[0]
      while True:
         hare = nums[nums[hare]]
         tortoise = nums[tortoise]
         if hare == tortoise:
            break
      ptr = nums[0]
      while ptr!=tortoise:
         ptr = nums[ptr]
         tortoise = nums[tortoise]
      return ptr
ob1 = Solution()
print(ob1.findDuplicate([3,1,3,4,2]))

輸入

[3,1,3,4,2]

輸出

3

更新日期: 04-May-2020

2K+ 次瀏覽

開啟你的職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.