leetcode645. 错误的集合

该文章描述了两种方法来找出数组中根据下标和元素对应关系出现的问题。第一种是通过遍历数组,将元素作为下标并改变其对应值为负数,从而找到重复和缺失的元素。第二种方法利用数学公式计算总和,找出数组中多余的和缺失的元素。
摘要由CSDN通过智能技术生成

根据数组元素和下标的对应关系

  1. 将数组内元素作为下标,再将其对应的数变为负数
  2. 样对于重复的数作为下标会被重复访问到,下标就是重复的那个数
  3. 数组内有的元素作为下标对应位置的元素都会被置为负数
  4. 组内缺失的那个元素访问不到还是正数
def findErrorNums(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        for i in range(n):
            index = abs(nums[i])-1      #这里前面的操作可能将后面的数变为负数了,所以要取绝对值
            if nums[index] < 0:         #这样对于重复的数作为下标其对应数组内的数会被重复访问到,而下标就是重复的那个
                res1 = index + 1
            else:                   
                nums[index] *= -1
        for i in range(n):
            if nums[i] > 0:             #这样一来数组内有的元素作为下标对应位置的元素都会被置为负数
                res2 = i + 1            #数组内缺失的那个元素访问不到还是正数,所以下标就是对应的数组内缺失的元素
        return [res1,res2]

数学,简单
总和 = 没有缺失的结果
去重数组和 = 去除重复之后的数组的和
数组和 = 数组的和
缺失 = 总和 - 去重数组和
多余 = 数组和 - 去重数组和

def findErrorNums(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        n = len(nums)
        total = n*(n+1)/2
        num = sum(set(nums))
        miss = total-num
        dul =sum(nums) - num
        return [dul,miss]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值