前言
数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有
写出高质量代码的潜意识
。
一、问题描述
给你一个整数数组 nums 。如果任一值在数组中出现至少两次,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1:
输入:nums = [1,2,3,1] 输出:true
示例 2:
输入:nums = [1,2,3,4] 输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true
提示:
- 1 <= nums.length <= 105
- 109 <= nums[i] <= 109
二、思路讲解
2.1 排序法 O(Nlog(N))
讲nums排序之后,从第一个元素以后的元素进行迭代,一旦发现该元素和前一个元素相等的话,就返回true,迭代完依旧未找到返回false
var containsDuplicate = function(nums) { nums.sort((a,b)=>a-b) for(let i = 1; i< nums.length ;i++){ if(nums[i] === nums[i-1]){ return true } } return false };
2.2 哈希表记录 O(N) 空间复杂度O(N)
var containsDuplicate = function(nums) { let map = new Map() for(let i = 0; i < nums.length; i++){ console.log(map.has(nums[i])) if(map.has(nums[i])){ return true } map.set(nums[i],true) } return false };
2.3 every方法
every 方法接受一个函数,函数的返回值都为true,则every返回true,否则返回fasle
var containsDuplicate = function(nums) { return !nums.every((num,index,arr)=>arr.indexOf(num)===index) };
测试结果
虽然最后一种方法只需要一行代码,但是时间复杂度稍微高了点
后续
- 地址: 存在重复的元素
好了,本篇 力扣-存在重复的元素
到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。