🍧leetcode刷题之【219. 存在重复元素 II】

215 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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] <= 109
  • 0 <= 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专注前端开发,共同学习进步啊 ~