Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[leetcode]217.存在重复元素 #40

Open
MagicalBridge opened this issue Jan 10, 2021 · 0 comments
Open

[leetcode]217.存在重复元素 #40

MagicalBridge opened this issue Jan 10, 2021 · 0 comments
Labels
documentation Improvements or additions to documentation

Comments

@MagicalBridge
Copy link
Owner

方法一:排序

在对数字从小到大排序之后。数组的重复元素一定出现在相邻的位置,因此我们可以扫描已经排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  // 将数组做升序排列
  nums.sort((a, b) => a - b);
  // 数组的长度
  const n = nums.length;
  // 循环遍历数组 因为下面需要有 i+1的操作,所以这里n-1是取不到的。
  for (let i = 0; i < n - 1; i++) {
    if (nums[i] === nums[i + 1]) {
      return true;
    }
  }
  return false;
};

复杂度分析

  • 时间复杂度: O(NlogN),其中N为数组的长度。需要对数组进行排序。
  • 空间复杂度: O(logN),其中N为数组的长度,注意在这里我们应当考虑递归调用栈的深度

方法二:哈希表

对于数组中的每个元素,我们将它插入到哈希表中,如果插入一个元素的时候发现这个元素已经存在于哈希表中,则说明存在重复的元素。

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  const set = new Set();
  for (const x of nums) {
    if (set.has(x)) {
      return true;
    }
    set.add(x);
  }
  return false;
};

复杂度分析:

  • 时间复杂度:O(N),其中N为数组的长度。
  • 空间复杂度:O(N),其中N为数组的长度。
@MagicalBridge MagicalBridge added the documentation Improvements or additions to documentation label Jan 10, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant