题解 | #数组中重复的数字#
数组中重复的数字
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524
class Solution:
def duplicate(self, nums):
if not nums or len(nums) == 0:
return -1
n = len(nums)
counts = [0] * n
for num in nums:
if num < 0 or num >= n:
return -1
counts[num] += 1
if counts[num] > 1:
return num
return -1
# 测试示例
solution = Solution()
print(solution.duplicate([2, 3, 1, 0, 2, 5, 3])) # 输出:2
这个问题的解题思路如下:
- 首先,检查输入数组是否为空或长度为0。如果是,则返回-1。
- 获取数组的长度n,并创建一个长度为n的counts数组,用于存储每个数字出现的次数。
- 遍历输入数组nums中的每个数字num:如果num不在0到n-1范围内,则输入数组不合法,返回-1。在counts数组中将num对应的计数加1。如果num在counts数组中的计数大于1,说明num是一个重复数字,返回num。
- 如果遍历完成后没有找到重复数字,返回-1。
这个解法的时间复杂度是O(n),因为它遍历了输入数组一次。空间复杂度也是O(n),因为我们创建了一个额外的counts数组来存储每个数字出现的次数。
