給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-the-duplicate-number
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
題目如上:
我的思路十分簡單,1.排序如果相鄰兩個數字相同就返回他,因爲只有一個重複數字2.可以利用字典計數,然後遍歷字典,找到個數大於1的那個值,返回它的
方法一
class Solution:
def findDuplicate(self, nums: List[int]) -> int:
# 先排序
nums.sort()
# 後遍歷,比較相鄰值
for i in range(len(nums)):
if nums[i]==nums[i+1]:
return nums[i]
方法二
class Solution:
def findDuplicate(self, nums: List[int]) -> int:
p={}
for i in nums:
p[i]=p.get(i,0)+1
for k,v in p.items():
if v>1:
return k
官方題解更巧妙利用的是二分法,但是不容易想到,同時這兩個方法的效率還是可以的