返回介绍

solution / 0900-0999 / 0961.N-Repeated Element in Size 2N Array / README

发布于 2024-06-17 01:03:32 字数 3110 浏览 0 评论 0 收藏 0

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

English Version

题目描述

给你一个整数数组 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
  • numsn + 1 不同的 元素组成,且其中一个元素恰好重复 n

解法

方法一:哈希表

由于数组 $nums$ 一共有 $2n$ 个元素,其中有 $n + 1$ 个不同的元素,且有一个元素重复了 $n$ 次,说明数组中的其余 $n$ 个元素都是不同的。

因此,我们只需要遍历数组 $nums$,用哈希表 $s$ 记录遍历过的元素。当遍历到某个元素 $x$ 时,如果 $x$ 在哈希表 $s$ 中已经存在,说明 $x$ 是重复的元素,直接返回 $x$ 即可。

时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为数组 $nums$ 的长度。

class Solution:
  def repeatedNTimes(self, nums: List[int]) -> int:
    s = set()
    for x in nums:
      if x in s:
        return x
      s.add(x)
class Solution {
  public int repeatedNTimes(int[] nums) {
    Set<Integer> s = new HashSet<>(nums.length / 2 + 1);
    for (int i = 0;; ++i) {
      if (!s.add(nums[i])) {
        return nums[i];
      }
    }
  }
}
class Solution {
public:
  int repeatedNTimes(vector<int>& nums) {
    unordered_set<int> s;
    for (int i = 0;; ++i) {
      if (s.count(nums[i])) {
        return nums[i];
      }
      s.insert(nums[i]);
    }
  }
};
func repeatedNTimes(nums []int) int {
  s := map[int]bool{}
  for i := 0; ; i++ {
    if s[nums[i]] {
      return nums[i]
    }
    s[nums[i]] = true
  }
}
function repeatedNTimes(nums: number[]): number {
  const s: Set<number> = new Set();
  for (const x of nums) {
    if (s.has(x)) {
      return x;
    }
    s.add(x);
  }
}
/**
 * @param {number[]} nums
 * @return {number}
 */
var repeatedNTimes = function (nums) {
  const s = new Set();
  for (const x of nums) {
    if (s.has(x)) {
      return x;
    }
    s.add(x);
  }
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文