开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的14天,点击查看活动详情
1 题目
给你一个整数数组 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
提示:
1 <= nums.length <= 105-109 <= nums[i] <= 1090 <= k <= 105
2 个人解析
2.1 思路
这一题的意思其实是让我们找到两个相同的数,且这两个数相邻的位置要最近,然后用相邻的距离与k这个值相比较,要小于这个k那么就会返回true,否则返回false.
2.2 代码
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var containsNearbyDuplicate = function(nums, k) {
for(let i=0;i<nums.length;i++){
let firstIndex = i;
let lastIndex;
for(let j=firstIndex+1;j<nums.length;j++){
if(nums[j]===nums[i]){
lastIndex = j;
break;
}
}
if(firstIndex!==lastIndex&&lastIndex-firstIndex<=k){
return true;
}
}
return false;
};
3 小结
感谢看完。
扩展一个前端小知识:
- 什么是闭包,请举个例子?
闭包,简而言之,上面一个函数里面的变量,当这个函数执行完毕,但是函数里面依然有变量未销毁,变量的值依然存在,就形成了闭包。如下面这个例子:
function foo(){
var a = 2;
function bar(){
a=a+1;
console.log(a);
}
return bar;
}
var baz = foo();
baz(); // 3
baz(); // 4 -- 因为这里的a变量依然存在,没有被释放掉
感谢看完:
- 博主个人前端网站:zhangqiang.hk.cn
- 欢迎加入博主的前端学习qq交流群::706947563,专注前端开发,共同学习进步啊 ~