快樂的LeetCode --- 287. 尋找重複數

題目描述:

給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。

示例 1:

輸入: [1,3,4,2,2]
輸出: 2

示例 2:

輸入: [3,1,3,4,2]
輸出: 3

解題思路1:

由於題目假設只有一個重複的整數,因此使用collections包中的Counter模塊之後,出現的第一位就是次數最多的元素。


代碼1:

from collections import Counter
class Solution(object):
    def findDuplicate(self, nums):
        return Counter(nums).most_common(1)[0][0]

解題思路2:

找重複數字的一種典型方法就是:(原始數組 - 求集合後的差值) / 長度差


代碼2:

class Solution(object):
    def findDuplicate(self, nums):
        return abs(sum(nums)-sum(set(nums)))/abs(len(nums)-len(set(nums)))

解題思路3:

通過設置最大零數組,然後逐個遍歷原有數組,當元素首次出現時,置爲1。這樣,當下次出現時,我們即可找出重複元素。


代碼3:

class Solution:
    def findDuplicate(self, nums):
        bitmap = [0 for _ in range(max(len(nums), max(nums)+1))]
        for num in nums:
            if bitmap[num] == 1:
                return num
            else:
                bitmap[num] = 1

題目來源:

https://leetcode-cn.com/problems/find-the-duplicate-number

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章