Leetcode--python--swordはoffer03を指します

配列内の重複する番号を見つける

長さ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]不止出现一次,返回
                

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/AWhiteDongDong/article/details/110425303