【剑指Offer】数组中重复的数字 解题报告(Python)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuxuemingzhu/article/details/79704691

【剑指Offer】数组中重复的数字 解题报告(Python)

标签(空格分隔): 剑指Offer


题目地址:https://www.nowcoder.com/ta/coding-interviews

题目描述:

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

解题方法

LeetCode原题,这个思路特别巧妙,使用快慢指针,判断数组中是否有逻辑上的环存在。题目的返回方式需要注意。另外就是注意快慢指针的初始化方式。

代码:

# -*- coding:utf-8 -*-
class Solution:
    # 这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
    # 函数返回True/False
    def duplicate(self, nums, duplication):
        if len(set(nums)) == len(nums):
            duplication[0] = -1
            return False
        fast = nums[nums[0]]
        slow = nums[0]
        while fast != slow:
            fast = nums[nums[fast]]
            slow = nums[slow]
        fast = 0
        while fast != slow:
            fast = nums[nums[fast]]
            slow = nums[slow]
        duplication[0] = nums[fast]
        return True

Date

2018 年 3 月 26 日 – 学车要早起,困= =

阅读更多

没有更多推荐了,返回首页