昨日当年
你一双澄澈眼眸 便使我颠沛中毕生富有
leetcode 217. 存在重复元素

弱智写法:两个循环

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    if (nums.length == 1) return false
    for (let i = 0; i<nums.length; i++) {
        for (let j = 0; j<nums.length; j++) {
            if (i == j) continue
            if (nums[i] == nums[j]) {
                return true
            }
        }
    }
    return false
};
弱智写法

排序然后比较两个相邻的元素,但是用到 sort() 函数 不推荐

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    nums.sort()
    for(let i = 0; i < nums.length; i++) {
        if (nums[i] == nums[i+1]) return true
    }
    return false
};

第三种方法:set方法

set对象用于储存唯一值,如果nums有重复的值,会自动去掉,然后再比较长度就行了

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    return new Set(nums).size < nums.length
};

但是感觉用到此类高级方法,算法题就变得没意思了

方法四:将值全部储存在map,然后有遇到重复的就返回true

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function (nums) {
    const map = new Map();
    for (let i = 0; i < nums.length; i++) {
        if (map.has(nums[i])) {
            return true;
        } else {
            map.set(nums[i], 1);
        }
    }
    return false;
};

map对象学习: http://es6.ruanyifeng.com/#docs/set-map#Map


相关日志