# 217. 存在重复元素

# 题目

给定一个整数数组,判断是否存在重复元素。

如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false

输入: [1,1,1,3,3,4,3,2,4,2]

输出: true

# 题解

# 排序

排序后重复的数字肯定相邻

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  nums.sort((a, b) => a - b);
  for (let i = 0; i < nums.length - 1; ++i) {
    if (nums[i] == nums[i + 1]) return true;
  }
  return false;
};
1
2
3
4
5
6
7
8
9
10
11

时间复杂度: 由排序决定

空间复杂度: O(1)

# 哈希表

遍历数组存入哈希表,如果发现存在即是重复

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  let m = new Map();
  for (let i = 0; i < nums.length; ++i) {
    const cur = nums[i];
    if (m.has(cur)) {
      return true;
    } else {
      m.set(cur, 1);
    }
  }
  return false;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

时间复杂度: O(n) 一次遍历

空间复杂度: O(n) 和数组元素数量成线性关系