[toc] leetcode 961. 在长度 2N 的数组中找出重复 N 次的元素
题目描述
- 在长度 2N 的数组中找出重复 N 次的元素
给你一个整数数组 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 次
解题思路
法1
哈希表:
- 使用map[int]int,key为数字,value为出现的次数,
- 遍历数组记录出现的次数
- 如果有数字出现n次(n=len(nums)/2),则返回该数
根据题目描述进行优化
因为一共有2n个数字,并且一定有一个数字重复n次,那么其他字符就一定出现1次,那么只需要找到出现两次的字符就行了
可以将map的结构改为map[int]bool,就可以实现该功能,并且可以减少循环次数.
- 时间复杂度(O(n))
- 空间复杂度(O(n))
执行结果
法1
func repeatedNTimes(nums []int) int {
counter := make(map[int]bool)
for _, v := range nums {
if counter[v] {
return v
}
counter[v]=true
}
return -1
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 24 ms , 在所有 Go 提交中击败了 91.89% 的用户 内存消耗: 6.5 MB , 在所有 Go 提交中击败了 90.54% 的用户 通过测试用例: 103 / 103 炫耀一下:
本文由mdnice多平台发布