[LeetCode] 219. 存在重复元素 II

题目描述:

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 ij ,满足 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

题目链接:

. - 力扣(LeetCode)

解题主要思想:

其实这道题跟 "两数之和" 有点像,但需要注意的是,题目说的是<= k,因此我们需要尽可能地缩小i和j的距离,但如果是>= k,那我们就需要尽可能地增大i和j的距离,解决办法就是只记录第一次发现nums[i]时的下标。

两数之和链接:
[LeetCode] 1. 两数之和-CSDN博客

解题代码:

cpp 复制代码
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for(int i = 0; i < nums.size(); ++i) {
            if (map.count(nums[i])) {
                if ((i-map[nums[i]]) <= k) return true;
            }
            map[nums[i]] = i;  // 如果是>= k,那么就需要加上在这行代码最前面加上else
        }
        return false;
    }
};
相关推荐
别或许1 小时前
1、高数----函数极限与连续(知识总结)
算法
派大星~课堂1 小时前
【力扣-142. 环形链表2 ✨】Python笔记
python·leetcode·链表
田梓燊1 小时前
code 560
数据结构·算法·哈希算法
笨笨饿2 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
kobesdu2 小时前
综合强度信息的激光雷达去拖尾算法解析和源码实现
算法·机器人·ros·slam·激光雷达
weixin_413063212 小时前
记录 MeshFlow-Online-Video-Stabilization 在线稳像
算法·meshflow·实时防抖
会编程的土豆2 小时前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
炘爚3 小时前
深入解析printf缓冲区与fork进程复制机制
linux·运维·算法
迈巴赫车主3 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 78. 子集 | C++ 回溯算法题解
c++·算法·leetcode