本文最后更新于:2020年11月12日 下午
剑指Offer03-数组中重复的数字
找出数组中重复的数字
在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例1:
输入:
[2,3,1,0,2,5,3]
输出:
2或3
限制:
2<=n<=100000
方法一:遍历数组
由于只需要找出数组中任意一个重复的数字,因此遍历数组,遇到重复的数字即返回。为了判断一个数字是否重复遇到,使用集合存储已经遇到的数字,如果遇到的一个数字已经在集合中,则当前的数字是重复数字。
- 初始化集合为空集合,重复数字repeat = -1
- 遍历数组汇总的每个元素:
- 将该元素加入集合中,判断是否添加成功
- 如果添加失败,说明该元素已经在集合中,因此该元素是重复元素,将该元素的值赋给repeat,并结束遍历。
- 将该元素加入集合中,判断是否添加成功
- 返回repeat
复杂性分析
- 时间复杂度:O(n)。
- 遍历数组一遍。使用哈希集合(HashSet),添加元素的时间复杂度为O( 1),故总的时间复杂度为O(n)。
- 空间复杂度:O(n)。不重复的每个元素都可能存入集合,因此占用O(n)额外空间。
class Solution:
def findRepeatNumber(self, nums):
temp_set = set()
repeat = -1
for i in range(len(nums)):
temp_set.add(nums[i])
if len(temp_set) < i + 1:
repeat = nums[i]
break
return repeat
方法二:利用python的sort函数排序,然后计算相邻两个数据是否相等即可。
class Solution:
def findReatNumber(self, nums):
nums.sort()
for i in range(len(nums) - 1):
if nums[i] == nums[i+1]:
return nums[i]
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!