【C++刷题】力扣-#219-存在重复元素II

题目描述

给定一个整数数组 nums 和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j 使得 nums[i] = nums[j] 且 i!= j。也就是说,不能有重复的元素。

示例

示例 1:

bash 复制代码
输入: nums = [1,2,3,1], k = 3
输出: true

示例 2:

bash 复制代码
输入: nums = [1,2,3,1,2,4], k = 3
输出: false

示例 3:

bash 复制代码
输入: nums = [1,2,3,1,2,4], k = 2
输出: true

题解

这个问题可以通过使用哈希表来解决。

  1. 初始化:创建一个空的哈希表 hashMap 来存储数组元素及其索引。
  2. 遍历数组:遍历整数数组 nums。
    ○ 对于每个元素,检查它是否已经在哈希表中:
    ■ 如果在,并且索引差小于 k,则返回 true。
    ■ 如果在,并且索引差大于等于 k,则从哈希表中移除旧的索引。
    ■ 如果不在,将其添加到哈希表中,并记录当前索引。
  3. 返回结果:如果遍历结束后没有找到重复元素,则返回 false。

代码实现

cpp 复制代码
bool containsNearbyDuplicate(vector<int>& nums, int k) {
    unordered_map<int, int> hashMap;
    for (int i = 0; i < nums.size(); ++i) {
        if (hashMap.find(nums[i]) != hashMap.end() && i - hashMap[nums[i]] <= k) {
            return true;
        }
        hashMap[nums[i]] = i;
    }
    return false;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是数组 nums 的长度。我们需要遍历一次数组,并且对于每个元素,我们进行常数时间的哈希表操作。

● 空间复杂度:O(n),因为在最坏的情况下,我们可能需要将所有元素存储在哈希表中。

这个算法的优势在于它的时间效率较高,只需要一次遍历即可判断是否存在重复元素,且直接利用了哈希表的快速查找特性。

相关推荐
Yzzz-F9 小时前
Problem - 2205D - Codeforces
算法
智者知已应修善业10 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机
Halo_tjn10 小时前
Java Set集合相关知识点
java·开发语言·算法
生成论实验室10 小时前
《事件关系阴阳博弈动力学:识势应势之道》第四篇:降U动力学——认知确定度的自驱演化
人工智能·科技·神经网络·算法·架构
AI科技星11 小时前
全域数学·72分册:场计算机卷【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
云泽80811 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
科研前沿11 小时前
镜像孪生VS视频孪生核心技术产品核心优势
大数据·人工智能·算法·重构·空间计算
水蓝烟雨11 小时前
1931. 用三种不同颜色为网格涂色
算法·leetcode
AI进化营-智能译站12 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
晨曦夜月12 小时前
map与unordered_map区别
算法·哈希算法