返回介绍

solution / 0200-0299 / 0217.Contains Duplicate / README_EN

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

217. Contains Duplicate

中文文档

Description

Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

 

Example 1:

Input: nums = [1,2,3,1]
Output: true

Example 2:

Input: nums = [1,2,3,4]
Output: false

Example 3:

Input: nums = [1,1,1,3,3,4,3,2,4,2]
Output: true

 

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

Solutions

Solution 1: Sorting

First, we sort the array nums.

Then, we traverse the array. If there are two adjacent elements that are the same, it means that there are duplicate elements in the array, and we directly return true.

Otherwise, when the traversal ends, we return false.

The time complexity is $O(n \times \log n)$, where $n$ is the length of the array nums.

class Solution:
  def containsDuplicate(self, nums: List[int]) -> bool:
    return any(a == b for a, b in pairwise(sorted(nums)))
class Solution {
  public boolean containsDuplicate(int[] nums) {
    Arrays.sort(nums);
    for (int i = 0; i < nums.length - 1; ++i) {
      if (nums[i] == nums[i + 1]) {
        return true;
      }
    }
    return false;
  }
}
class Solution {
public:
  bool containsDuplicate(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    for (int i = 0; i < nums.size() - 1; ++i) {
      if (nums[i] == nums[i + 1]) {
        return true;
      }
    }
    return false;
  }
};
func containsDuplicate(nums []int) bool {
  sort.Ints(nums)
  for i, v := range nums[1:] {
    if v == nums[i] {
      return true
    }
  }
  return false
}
function containsDuplicate(nums: number[]): boolean {
  nums.sort((a, b) => a - b);
  const n = nums.length;
  for (let i = 1; i < n; i++) {
    if (nums[i - 1] === nums[i]) {
      return true;
    }
  }
  return false;
}
impl Solution {
  pub fn contains_duplicate(mut nums: Vec<i32>) -> bool {
    nums.sort();
    let n = nums.len();
    for i in 1..n {
      if nums[i - 1] == nums[i] {
        return true;
      }
    }
    false
  }
}
/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function (nums) {
  return new Set(nums).size !== nums.length;
};
public class Solution {
  public bool ContainsDuplicate(int[] nums) {
    return nums.Distinct().Count() < nums.Length;
  }
}
class Solution {
  /**
   * @param Integer[] $nums
   * @return Boolean
   */
  function containsDuplicate($nums) {
    $numsUnique = array_unique($nums);
    return count($nums) != count($numsUnique);
  }
}
int cmp(const void* a, const void* b) {
  return *(int*) a - *(int*) b;
}

bool containsDuplicate(int* nums, int numsSize) {
  qsort(nums, numsSize, sizeof(int), cmp);
  for (int i = 1; i < numsSize; i++) {
    if (nums[i - 1] == nums[i]) {
      return 1;
    }
  }
  return 0;
}

Solution 2: Hash Table

We traverse the array and record the elements that have appeared in the hash table $s$. If an element appears for the second time, it means that there are duplicate elements in the array, and we directly return true.

The time complexity is $O(n)$, and the space complexity is $O(n)$, where $n$ is the length of the array nums.

class Solution:
  def containsDuplicate(self, nums: List[int]) -> bool:
    return len(set(nums)) < len(nums)
class Solution {
  public boolean containsDuplicate(int[] nums) {
    Set<Integer> s = new HashSet<>();
    for (int num : nums) {
      if (!s.add(num)) {
        return true;
      }
    }
    return false;
  }
}
class Solution {
public:
  bool containsDuplicate(vector<int>& nums) {
    unordered_set<int> s(nums.begin(), nums.end());
    return s.size() < nums.size();
  }
};
func containsDuplicate(nums []int) bool {
  s := map[int]bool{}
  for _, v := range nums {
    if s[v] {
      return true
    }
    s[v] = true
  }
  return false
}
function containsDuplicate(nums: number[]): boolean {
  return new Set<number>(nums).size !== nums.length;
}
use std::collections::HashSet;
impl Solution {
  pub fn contains_duplicate(nums: Vec<i32>) -> bool {
    nums.iter().collect::<HashSet<&i32>>().len() != nums.len()
  }
}

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

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

发布评论

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