持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
Hi, 大家好。
今后会按类分享算法题。
今天分享两道类似的题目:存在重复元素
217.存在重复元素
leetcode地址:leetcode.cn/problems/co…
难度
简单
描述
给你一个整数数组 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
解法
- 使用查找表的原理
- 首先我们开始遍历数组
- 在遍历的过程中,如果hash中没有当前元素,就将当前元素设置次数为1
- 当hash中有当前元素,直接返回 true
- 否则返回false
代码
/**
* @param {number[]} nums
* @return {boolean}
*/
var containsDuplicate = function(nums) {
let map = new Map();
for(let i of nums){
if(map.has(i)){
return true
}
map.set(i, 1)
}
return false
};
219. 存在重复元素 II
leetcode地址:leetcode.cn/problems/co…
难度
简单
描述
给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。
示例1
输入: nums = [1,2,3,1], k = 3
输出: true
示例2
输入: nums = [1,0,1,1], k = 1
输出: true
示例3
输入: nums = [1,2,3,1,2,3], k = 2
输出: false
解法
- 这道题也是使用查找表的原理
- 定义一个hash
- 遍历数组
- 将遍历的元素和当前索引存入到hash
- 判断如果hash中有当前遍历的元素,并且 当前索引 减去 当前值在hash中对应的索引 小于 k,表示找到了符合题意的解,则返回true
- 否则,遍历完,一直没有找到,返回false
代码
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
const map = new Map();
for(let i in nums){
if(map.has(nums[i]) && i - map.get(nums[i]) <= k){
return true;
}
map.set(nums[i], i)
}
return false;
};