• 287. 寻找重复数


    给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。

    示例 1:

    输入: [1,3,4,2,2]
    输出: 2
    示例 2:

    输入: [3,1,3,4,2]
    输出: 3
    说明:

    不能更改原数组(假设数组是只读的)。
    只能使用额外的 O(1) 的空间。
    时间复杂度小于 O(n2) 。
    数组中只有一个重复的数字,但它可能不止重复出现一次。

    无脑法

    class Solution:
        def findDuplicate(self, nums: List[int]) -> int:
            cnt=collections.Counter(nums)
            for i in nums:
                if cnt[i]>1:
                    return i
           

    继续简化

    class Solution:
        def findDuplicate(self, nums: List[int]) -> int:
            return next(a for a,b in collections.Counter(nums).items() if b>1)

     双指针,类比链表找环

    class Solution:
        def findDuplicate(self, nums: List[int]) -> int:
            fast=slow=0
            while True:
                fast=nums[nums[fast]]
                slow=nums[slow]
                if fast==slow:
                    fast=0
                    while nums[slow]!=nums[fast]:
                        fast=nums[fast]
                        slow=nums[slow]
                    return nums[slow]
    
           

  • 相关阅读:
    分布式事务
    K8s应用案例介绍——阿里云
    数据库索引的底层原理——b树
    Understanding the GitHub flow
    Code Review
    详解微服务架构
    yarn之package.json
    yarn.lock文件
    Git Api——git开发
    Unit Test —— xUnit.net
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13766996.html
Copyright © 2020-2023  润新知