leetcode 287. 寻找重复数

  1. 题目链接 https://leetcode-cn.com/problems/find-the-duplicate-number/

  2. 题目描述

    1. 给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数
    2. 输入: [3,1,3,4,2]
      输出: 3
    3. 输入: [1,3,4,2,2]
      输出: 2
  3. 解题思路:

    1. 题目要求寻找重复数, 很自然的想到通过计数的方式来做。计数最通用的方式是用哈希表,但本题要求O(1)的空间,所以哈希表是不行了。因为题目的输入的特殊性性, nums数组内每个元素都在 [1, n] ,那么就可以当作下标来使用,并且由于元素的非负性,那么就可以通过改变正负来判定该元素是否已经被索引过。
    2. 从左向右遍历, 以元素作为下标来索引数组。若索引到的元素为正,那么取其相反数,若为负,说明之前已被索引,作为返回值返回。
class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        for num in nums:
            if nums[abs(num)] < 0:
                return abs(num)
            else:
                nums[abs(num)] = -nums[abs(num)]
        

猜你喜欢

转载自blog.csdn.net/qq_38043440/article/details/88292768