存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false
示例 1:
输入: [1,2,3,1]
输出: true
作者:力扣 (LeetCode)
链接:https://leetcode-/leetbook/read/top-interview-questions-easy/x248f5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1
,依次遍历,用nums[i]与数组中后面的数字对比是否相等(使用for):
var containsDuplicate = function (nums) {let flag = falsefor (let i = 0; i < nums.length; i++) {for (let o = i + 1; o < nums.length; o++) {if (nums[i] === nums[o]) {flag = true}}}return flag};
2
,依次遍历,用nums[i]与数组中后面的数字对比是否相等(使用include),判断i后面的数组中是否包含nums[i]:
var containsDuplicate = function (nums) {let flag = falsefor (let i = 0; i < nums.length; i++) {if ((nums.slice(i + 1, nums.length)).includes(nums[i])) {flag = true}}return flag};
3
,使用哈希
var containsDuplicate3 = function (nums) {let tempNums = []for (let i in nums) {if (tempNums[nums[i]]) {return true}tempNums[nums[i]] = true;}return false}
上面这个是通过javascript的哈希而来
首先要了解javascript中对象,数组,对象都可以看作是
键-值
,如下面的演示:
const person = [];person["name"] = "小明"person["age"] = 18person["hobbies"] = '睡觉'// console.dir(person);for (const key in person) {console.log(key + ":" + person[key]);}
而在3
中,依次遍历nums中的对象,如果tempNums[nums[i]]
中的对象为true,
那么就将返回true,并终止运行后面的代码,
那么它是如何遍历到重复数组返回true
的呢:
如果有一个数组:
let nums = [2, 14, 18, 22, 22]
在遍历
2
时,tempNums中不存在,则在tempNums[2]
中标记为true
,在便利到第一个22时,会将tempNums[22]标记为true,
那么在遍历第二个22时,i=4(nums中的index),
tempNums[22]
之前已经被标为true了,所以就直接返回true,不必再往后运行
神奇and迷惑