zoukankan      html  css  js  c++  java
  • 287寻找重复数

    题目:给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
    链接:https://leetcode-cn.com/problems/find-the-duplicate-number

    法一:自己的代码     不符合题意,用了额外的O(n)空间

    思路:没有用字典进行记录每个元素的频率,用数组进行记录,将nums中的值作为memo的索引进行记录

    from typing import List
    class Solution:
        def findDuplicate(self, nums: List[int]) -> int:
            n = len(nums)
            memo = [0] * (n+1)
            for i in nums:
                if memo[i] == 0:
                    memo[i] += 1
                else:
                    return i
    View Code

    法二:快慢指针法   正确的解法

    思路:先用两个指针遍历数组,由于快指针是慢指针的二倍,且由于环的存在,所以二者必定会相遇,相遇的时候一定在环内,因为环外的路径是单向的只会走一遍,再用一个指针从头开始遍历,与慢指针相遇的时候一定在入口处,即重复的节点上,此时返回该值,

    from typing import List
    class Solution:
        def findDuplicate(self, nums: List[int]) -> int:
            slow=0
            fast=0
            while(1):
                slow=nums[slow]
                # 以上一行得到的slow为索引
                fast=nums[nums[fast]]
                if(slow==fast):
                    break
            find=0
            while(1):
                find=nums[find]
                slow=nums[slow]
                if(find==slow):
                    return find
    if __name__ == '__main__':
        solution = Solution()
        result = solution.findDuplicate([1,3,4,2,2])
        print(result)
    View Code

    参考:https://leetcode-cn.com/problems/find-the-duplicate-number/solution/er-fen-fa-kuai-man-zhi-zhen-zhu-xing-jie-shi-pytho/

  • 相关阅读:
    汉语-成语:鳏寡孤惸
    汉语-汉字:谶
    汉语-汉字:彘
    汉语-汉字:齑、齏
    mac下配置adb
    常见的开发语言(或IT技术)一览
    SurfaceView的经典写法
    HDU4499 Cannon DFS 回溯的应用
    什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
    Cocos开发中性能优化工具介绍之使用Windows任务管理器
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12378420.html
Copyright © 2011-2022 走看看