配列内の重複する番号を見つける
長さnの配列nums内のすべての数値は、0〜n-1の範囲です。配列内のいくつかの数字が繰り返されますが、何回繰り返されるか、また各数字が何回繰り返されるかはわかりません。配列内の重複する番号を見つけてください
class Solution(object):
def findRepeatNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dic = set() #首先创建一个集合
for i in nums: #遍历nums
if i in dic: #如果在dic集合,返回,break
return(i)
else: #否则将i添加到集合
dic.add(i)
別の方法であるin-situ交換メソッドが使用されます。numsの添え字はnums要素に対応し、numsの添え字はnums要素に対応する値と等しくなります。繰り返しがある場合は、要素が返されます。
class Solution(object):
def findRepeatNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(len(nums)):#遍历nums
if nums[i] == i: #如果下标i对应的元素等于i,则跳过
continue
if nums[nums[i]] == nums[i]: #证明nums[i]不止出现一次,返回
return(nums[i])
nums[nums[i]] = nums[i] #否则,将nums中下标i对应的值赋值给该值所对应的nums的下标元素值,这样如果下次num[i]等于nums[nums[i]],证明nums[i]不止出现一次,返回