📌  相关文章
📜  在大小为n的排序数组中找到唯一的重复元素(1)

📅  最后修改于: 2023-12-03 15:08:00.288000             🧑  作者: Mango

在大小为n的排序数组中找到唯一的重复元素

给定一个大小为 n 的排序数组 nums,其中存在一个重复的元素,请找出这个重复的元素。

解法1:暴力破解

最简单的方法就是遍历数组,找到重复的元素。

def findDuplicate(nums):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] == nums[j]:
                return nums[i]

时间复杂度为 O(n^2),并不是最优解。

解法2:哈希表

可以用哈希表来记录数组中出现过的元素,遇到重复的元素直接返回。

def findDuplicate(nums):
    hash_table = {}
    for num in nums:
        if num in hash_table:
            return num
        hash_table[num] = 1

时间复杂度为 O(n),但是需要额外的哈希表存储空间。

解法3:二分查找

由于数组已经排序,重复的元素一定是相邻的,可以通过二分查找来实现。

首先设定左右指针,计算中间位置。如果中间位置的值小于等于 mid,则说明重复元素在右边,将左指针移到 mid+1,否则重复元素在左边,将右指针移到 mid-1。最后左指针的值就是重复的元素。

def findDuplicate(nums):
    left, right = 0, len(nums) - 1
    while left < right:
        mid = (left + right) // 2
        count = 0
        for num in nums:
            if num <= mid:
                count += 1
        if count > mid:
            right = mid
        else:
            left = mid + 1
    return left

时间复杂度为 O(nlogn)。

参考资料: