力扣第287题:Fund The Duplicate Number(寻找重复数)学习后的思路分享

首先给出例题:

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

示例 1:

输入:nums =  [1,3,4,2,2]
输出: 2

示例 2:

输入: nums = [3,1,3,4,2]
输出: 3

示例 3:

输入: nums = [1,1]
输出: 1

注意点:

1.不更改原数组
2.在数组中只有一个重复的数字,但它可能重复出现很多次

在这里分享的是二分查找法(哈希表法)解题思路

(快慢指针法很妙但还没全搞懂,之后会补上):
首先让中指针指向n/2, 由题意可得,小于n/2的元素只会有(n/2)-1个。

如果超过了(n/2)-1.说明在[1,n/2)区间有重复的数字,此时我们将待查找的数据规模缩小到[1, n/2)。

如果数组没有超过(n/2)-1。说明在[n/2, n]区县有重复的数字,此时我们讲查找的数据规模缩小到[n/2, n].

然后依次类推,直到搜索完成,此时的最小值就是我们要求的重复值。

Python代码解法(参考借鉴别人写的):

class Solution(object):
    def findDuplicate(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        start, end = 1, len(nums) - 1
        mid = start + (end - start) // 2
        while start <= end:
            count = 0
            for num in nums:
                if num < mid:
                    count += 1
            if count >= mid:
                end = mid - 1
            else:
                start = mid + 1
            mid = start + (end - start) // 2
        return mid

数媒202潘zy 

猜你喜欢

转载自blog.csdn.net/zjsru_Beginner/article/details/119860379