稀碎从零算法笔记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;
    }
};

结算页面

相关推荐
Dizzy.51713 分钟前
数据结构(查找)
数据结构·学习·算法
E___V___E1 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
分别努力读书3 小时前
acm培训 part 7
算法·图论
武乐乐~3 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
'Debug3 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
Fansv5873 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习
爱学习的小王!4 小时前
nvm安装、管理node多版本以及配置环境变量【保姆级教程】
经验分享·笔记·node.js·vue
陈志化4 小时前
JMeter----笔记
笔记·jmeter
HollowKnightZ5 小时前
论文阅读笔记:Gated CRF Loss for Weakly Supervised Semantic Image Segmentation
论文阅读·笔记
yatingliu20195 小时前
代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
c++·算法