【算法】数组:存在重复元素

69 阅读1分钟

题目:存在重复元素

leetcode链接:初级算法 - 存在重复元素

说明:给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

理解:

1、有一个整数数组

2、数组可能有重复元素

3、判断数组是否存在重复元素,如果是,返回true,否则返回false

思路:

1、判断原数组和去重后的数组长度是否一致,一致返回false,否则返回true

2、借用临时变量存储数组元素的Boolean值,一旦发现临时变量存在值为true的情况,返回true,如果都没有则返回false

3、将数组排序,然后利用双指针法进行判断

题解:

方案一:比较前后数组长度

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

方案二:借用临时变量存储数组元素的Boolean值

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

方案三:将数组排序,然后使用双指针进行判断

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

总结:

本题相对简单,相信还有更多,更优的解题方案,暂时先整理这些了