LeetCode刷題——求衆數II+尋找重複數+數組中重複數據

尋找重複數字類型的題目的思路探討與源碼
本次將三道題放到一起講,它們的題目分別如下圖,該3道題都屬於數組類的題目,主要考察對於重複數字的理解,如何在列表中尋找找到重複數字並返回是核心。通過考慮轉換列表爲KV形式的字典,形成Key爲原始值、Value爲出現次數值。最終直接按value值的頻數進行篩選後,返回重複數據即可。該3題雖然屬於中級難度但是解決思路較簡單並且思路幾乎完全一樣。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
本人在做到這三題後,認爲需要將list轉爲KV形式的字典,然後直接根據出現次數篩選即可,三者的代碼幾乎一樣,唯一的區別是求衆數II這個題目要首先求得n/3的值作爲篩選條件,其他兩道題的篩選條件直接設定爲1即可,篩選完進行返回。代碼如下所示:

#噴火龍與水箭龜
#求衆數II
class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
        from collections import Counter
        numLen=int(len(nums)/3)
        numDict = dict(Counter(nums))
        res=[key for key,value in numDict.items()if value > numLen]
        return res
#噴火龍與水箭龜
#尋找重複數
class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        from collections import Counter 
        ac = dict(Counter(nums))
        resU=[key for key,value in ac.items()if value > 1]
        res=resU[0]
        return res
#噴火龍與水箭龜
#數組中重複的數據
class Solution:
    def findDuplicates(self, nums: List[int]) -> List[int]:
        from collections import Counter 
        ga = dict(Counter(nums))
        res=[key for key,value in ga.items()if value > 1]
        return res

在上述代碼中,代碼的邏輯是一樣的,都是引入Counter後,將nums列表轉化爲dict字典形式,然後對value值進行過濾,最後通過遍歷整個字典並進行篩選後,得到最終的結果並返回。需要注意的是,本代碼是作者在leetcode運行的代碼,如需使用請注意縮進等細節。
最終結果分別按順序排列(求衆數II+尋找重複數+數組中重複數據)如下:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
從結果來說感覺速度還行,但是應該可以進一步提速,希望朋友們能夠多多指教,非常感謝。

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