稀碎从零算法笔记Day22-LeetCode:存在重复元素 II

题型:哈希表、数组

链接:219. 存在重复元素 II - 力扣(LeetCode)

来源:LeetCode

题目描述

给你一个整数数组 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

提示:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • 0 <= k <= 105

题目思路

不看提示的话(不考虑数组元素个数)可以直接暴力(双指针 遍历数组),元素一多就炸

考虑时间复杂度的话,可以用哈希表。因为要看重复元素 的出现次数,要看两个int元素,那可以用unordered_map来存,key是 nums[i],value是 i 。用 i 来遍历数组,hash[nums[i]] == i 时,说明数组中这个元素出现过,这时候再看一下差,满足条件就可以return 1了,不满足就继续循环,差值不够就更新哈希表对应key的value

C++代码

cpp 复制代码
class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
    // 哈希表
    // 遍历数组,如果当前元素和哈希表中的元素相同(说明重复了),看i-hash[nums[i]]
    unordered_map<int,int> temp_hash;//key nums[i] value i
    int i=0,len=nums.size();
    for(;i<len;i++)
    {
        if(temp_hash.count(nums[i]) && i-temp_hash[nums[i]]<=k)
            return 1;
        else
            temp_hash[nums[i]] = i;
    }
    return 0;
    }
};

结算页面

相关推荐
燃于AC之乐3 小时前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
saoys8 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
MM_MS8 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E9 小时前
【二分法】寻找峰值
算法
mit6.8249 小时前
位运算|拆分贪心
算法
电子小白1239 小时前
第13期PCB layout工程师初级培训-1-EDA软件的通用设置
笔记·嵌入式硬件·学习·pcb·layout
ghie90909 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体19 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9989 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx10 小时前
加密算法加密算法
开发语言·c++·算法