Skip to content

Latest commit

 

History

History
55 lines (53 loc) · 1.69 KB

217.md

File metadata and controls

55 lines (53 loc) · 1.69 KB

217. Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct.

给定一个数字数组,判断这个数组中是否包含重复的数字。 如果有任何一个数字出现了至少两次,返回true,如果没有重复返回false

因为之前看过一道判断一个数组中是否有不是成对出现的元素的题,所以看到这道题的时候想歪了,想了半天异或,然并卵,后来看到这道题的标签中有Hash Table,豁然开朗。
虽然js中没有hashtable,但是object的属性就是hashtable,因此便想到了用属性赋值的方法。

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  var obj = {};
  var size = 0;
  for (var i = 0; i < nums.length; i++) {
    if (!(nums[i] in obj)) {
      obj[nums[i]] = 0;
      size++;
    }
  }
  return size === nums.length ? false : true;
};
16 / 16 test cases passed.
Status: Accepted
Runtime: 168 ms

AC之后再回来看代码,仍然还有可以改进的地方,如果判断nums[i]已经是obj的属性之后,就能够确定数组中已经有重复的元素了,因此改进如下:

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
  var obj = {};
  for (var i = 0; i < nums.length; i++) {
    if (!(nums[i] in obj)) {
      obj[nums[i]] = 0;
    } else {
      return true;
    }
  }
  return false;
};
16 / 16 test cases passed.
Status: Accepted
Runtime: 156 ms

快了12ms,打败了89.36%,哈哈。 :)