leetcode 961. 在长度 2N 的数组中找出重复 N 次的元素

105 阅读2分钟

[toc] leetcode 961. 在长度 2N 的数组中找出重复 N 次的元素

题目描述

  1. 在长度 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

哈希表:

  1. 使用map[int]int,key为数字,value为出现的次数,
  2. 遍历数组记录出现的次数
  3. 如果有数字出现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多平台发布