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+寻找重复数+数组中重复数据)如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从结果来说感觉速度还行,但是应该可以进一步提速,希望朋友们能够多多指教,非常感谢。

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