给你一个整数数组 nums ,该数组具有以下属性:
- nums.length == 2 * n.
- nums 包含 n + 1 个 不同的 元素
- nums 中恰有一个元素重复 n 次
找出并返回重复了 n 次的那个元素。
示例 1:
输入:nums = [1,2,3,3]
输出:3
示例 2:
输入:nums = [2,1,2,5,3,2]
输出:2
示例 3:
输入:nums = [5,1,5,2,5,3,5,4]
输出:5
提示:
2 <= n <= 5000
nums.length == 2 * n
0 <= nums[i] <= 104
nums 由 n + 1 个 不同的 元素组成,且其中一个元素恰好重复 n 次
解法一:(遍历找到两个相等的值,还可以得出比较次数count)
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
n = len(nums)
nums.sort()
count = 1
l, r = 0, n-1
while l<r:
for i in range(n):
if nums[l] == nums[l+1]:
count += 1
else:
l += 1
return nums[l]
解法二:(在解法一的基础上优化,去掉多余的参数)
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
n = len(nums)
nums.sort()
l = 0
while l < n:
for i in range(n):
if nums[l] == nums[l+1]:
continue
else:
l += 1
return nums[l]
解法三:(添加额外列表,存放不同元素)
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
r_nums = []
for num in nums:
if num not in r_nums:
r_nums.append(num)
else:
return num
解法四:(哈希表)
class Solution:
def repeatedNTimes(self, nums: List[int]) -> int:
r_nums = set()
for num in nums:
if num in r_nums:
return num
r_nums.add(num)
return -1