【leetcode系列】【算法】【简单】错误的集合

题目:

题目链接: https://leetcode-cn.com/problems/set-mismatch/

解题思路:

基础方式为暴力搜索两个for循环,第一层循环是1到n,第二层循环为nums,查看第一层循环的数字,是否在nums数组中,时间复杂度为O(n^{2})

其实我们可以创建一个n + 1长度的数组,初始化为0,然后对nums进行遍历

遍历时,使用当前遍历到的数字作为下标,更新创建的数组值 + 1,然后再对创建的数组进行遍历

如果数组中的值为0,则下标为缺失的数字;如果数组中的值为2,则下标为重复的数字

时间复杂度为O(2n) = O(n)

代码实现:

class Solution:
    def findErrorNums(self, nums: List[int]) -> List[int]:
        rec = [0] * (len(nums) + 1)
        for a in nums:
            rec[a] += 1

        lost_num = 0
        repeat_num = 0
        for idx in range(1, len(nums) + 1):
            if rec[idx] == 0:
                lost_num = idx
            elif rec[idx] > 1:
                repeat_num = idx

        return [repeat_num, lost_num]
发布了138 篇原创文章 · 获赞 13 · 访问量 2449

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105673872