一开始想用数组或者字典,访问过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语句之外,会漏掉一些数据,交换后只处理了一个数据,另一个数据的位置可能是不合适的。现在这种情况就能保证所有数据都处理好了再往下走。