我一直在重复:存在重复元素 | 刷题打卡

162 阅读2分钟

不知不觉就快9点了,也不知道每天在忙什么,总感觉时间不够又不知道时间去哪儿了。有时候一味做着低级趣味的活,想改变,却发现无能无力。每当离开电脑的时候已是夜深人静,闭上双眼,只想深深地睡去……突然,猛的惊醒,今天的题还没刷,也不知道为了什么,但愿以后的每天都有这个执念。

题目描述

分类困难度👍👎
算法简单 (55.13%)368-
标签 数组 哈希表
公司 airbnb | palantir | yahoo

给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

示例 1:

输入: [1,2,3,1]
输出: true

示例 2:

输入: [1,2,3,4]
输出: false

示例3:

输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

思路分析

首先想到的是先排序,再比较前后相邻元素,如果存在相等,就返回 true ,否则就返回 false。当然这里存在一个问题,用的 sort 导致原数据改变。

AC 代码

暴力解法

/*
 * @lc app=leetcode.cn id=217 lang=javascript
 *
 * [217] 存在重复元素
 */

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

待补充

总结

这可能也是全网最 low 的解法,毕竟改变了原数据。看了前端大佬的文章,借助JavaScript 语言特性有很多解法,比如 indexOf、Map 、Set等,无需改变原数据。不过,我到现在还没搞懂复杂度怎么计算,差距不是一般大啊!

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情