217.存在重复元素【简单】
题目
Problem: 217. 存在重复元素
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 (appears at least twice),返回 true
;如果数组中每个元素互不相同(distinct),返回 false
。
示例 1:
1 | 输入:nums = [1,2,3,1] |
示例 2:
1 | 输入:nums = [1,2,3,4] |
示例 3:
1 | 输入:nums = [1,1,1,3,3,4,3,2,4,2] |
提示:
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 | /** |