【leetcode】剑指 Offer 03. 数组中重复的数字

文章探讨了在处理数组重复元素时,使用set代替数组或字典的优势,特别是在去重功能上。两种不同的解法被提出,一种是利用set的去重特性找到重复数字,另一种是原地转换法,通过循环和条件判断实现数组元素的交换,确保所有数据都被正确处理。这两种方法提供了不同的思考角度,强调了学习他人解决方案的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一开始想用数组或者字典,访问过visited[i]=1那种,但是发现大佬用的是set,自带去重功能,确实更好用

class Solution(object):
    def findRepeatNumber(self, nums):
        dic=set()
        for i in nums:
            if i in dic:
                return i
            else:
                dic.add(i)
        return -1

主要是第二种解法。

现在觉得哪怕题目自己能做出来也有必要看看别人的题解,有时候会有一些稀奇古怪(?)自己很难想到的思路。

原地转换法的代码:

class Solution(object):
    def findRepeatNumber(self, nums):
        i=0
        while i<len(nums):
            if nums[i]==i:
                i=i+1
                continue}
            if nums[nums[i]]==nums[i]:
                return nums[i]
            else:
                t=nums[nums[i]]
                nums[nums[i]]=nums[i]
                nums[i]=t
        return -1
                

有一个点是i=i+1放在哪里,不能放在循环里、if-else语句之外,会漏掉一些数据,交换后只处理了一个数据,另一个数据的位置可能是不合适的。现在这种情况就能保证所有数据都处理好了再往下走。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值