0%

217.存在重复元素【简单】

217.存在重复元素【简单】

题目

Problem: 217. 存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 (appears at least twice),返回 true ;如果数组中每个元素互不相同(distinct),返回 false

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

解题思路与代码

思路一:

初始化标记为false,数组中任意值如果出现了2次,就可以标记为true

对数值中的每个值出现次数计数,如果某个值在某次计数后出现次数等于2就标记为true。

难点:不能用count[num]++来计数,因为nums[i]的取值是可以为负数的,但是数组不能有负索引号

**解决办法:**其实我上面的方法也是一种哈希表的方法,但我只用过C里面的map,对js中的map的用法不是很熟练,用map对象可以很好的解决负值的问题。暂时不写,还没理解map的用法。

思路二:

使用一个的新的数组,遍历nums数组,判断新数组n中是否存在nums[i],若不存在,则将nums[i]插入新数组n;若存在,则返回true;

判断数组中是否有某个值存在的方法为indexOf()

思路三:(官方题解思路)

在对数字从小到大排序之后,数组的重复元素一定出现在相邻位置中。因此,我们可以扫描已排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。

复杂度

  • 时间复杂度:
    $O(n)$

  • 空间复杂度:
    $O(n)$

Code

解题思路一:

暂无

解题思路二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* 语言为JavaScript
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let n = [];
for(let k of nums){
if(n.indexOf(k)==-1){//不存在
n.push(k);
}else{
return true;
}
}
//上面for/of循环的遍历是js的写法,是ES6新增的
//下面的代码的for循环遍历方式是c中的惯用写法,是常规的for循环
// for(let i = 0; i < nums.length; i++){//遍历数组
// if(n.indexOf(nums[i])==-1){//不存在
// n.push(nums[i]);
// }else{
// return true;
// }
// }
return false;
};
-------------本文结束感谢您的阅读-------------
原创技术分享,您的支持将鼓励我继续创作