存在重复元素
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false
- 示例 1:
输入: [1,2,3,1]
输出: true
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x248f5/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1
,依次遍历,用nums[i]与数组中后面的数字对比是否相等(使用for):
var containsDuplicate = function (nums) {
let flag = false
for (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 = false
for (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"] = 18
person["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迷惑