leetcode算法219.存在重复元素 II

Posted 学无止境小奇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode算法219.存在重复元素 II相关的知识,希望对你有一定的参考价值。

👏👏👏

哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!😍😍😍

⭐【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。✊✊✊

⭐【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。🤝🤝🤝

⭐如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。😘😘😘

❤️❤️❤️感谢各位朋友接下来的阅读❤️❤️❤️

文章目录

一、leetcode算法

1、存在重复元素 II

1.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.2、思路

思路一:此题我们可以使用hash表来解决问题,这道题有一个对应关系,就是数组的值和数组的下标有对应的关系,所以我们使用map来存储数组的值和对应的下标来使用。

1.3、答案

class Solution 
    public boolean containsNearbyDuplicate(int[] nums, int k) 
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        int length = nums.length;
        for(int i = 0; i < length; i++)
            int num = nums[i];
            //如果存在值相同,并且下标相减小于等于k
            if(map.containsKey(num) && i-map.get(num) <= k)
                return true;
            
            //将值和下标对应存入map中
            map.put(num,i);
        
        return false;
    

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的长度。需要遍历数组一次,对于每个元素,哈希表的操作时间都是 O(1)。

空间复杂度:O(n),其中 n 是数组 nums 的长度。需要使用哈希表记录每个元素的最大下标,哈希表中的元素个数不会超过 n。

以上是关于leetcode算法219.存在重复元素 II的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 219: 存在重复元素 IIContains Duplicate II

力扣(LeetCode)219. 存在重复元素 II

LeetCode-219. 存在重复元素 II.(java)

Leetcode刷题100天—219. 存在重复元素 II(哈希表)—day11

LeetCode-219. 存在重复元素 II.(java)

JS leetcode 存在重复元素 II 题解分析,记一次震惊的负向优化