LeetCode219:Contains Duplicate II

LeetCode219:Contains Duplicate II

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between i and j is at most k.

直接使用循环时间复杂度为O(N*k),使用stl中的基于红黑树实现的map能降低循环的时间,在O(logN)的时间复杂度内找到元素。或者更进一步使用基于hash表的unordered_map。在常数时间内找到元素。这道题学习到的两个经验:

  1. 当想在常数时间内完毕查询工作时考虑hash表。

  2. stl中实用hash表实现的数据结构map和set,所以它们也保留了hash表查询上的特点。

代码例如以下:

class Solution {
public:

/* 解法一:超时 bool containsNearbyDuplicate(vector<int>& nums, int k) { int length=nums.size(); if(length<=1||k<=0) return false; //将每个元素与其后面k个元素进行比較 for(int i=0;i<length;i++) { for(int j=1;j<=k&&(i+j)<length;j++) { if(nums[i]==nums[i+j]) return true; } } return false; } */


   //解法二,利用stl中的map。记录下整数以及它的下标 
    bool containsNearbyDuplicate(vector<int>& nums, int k) 
    {
        //之前直接使用的是map。时间是96ms,后来把map替换成unordered_map时间变成了32ms
        unordered_map<int ,int> maps;
        int length=nums.size();
        for(int i=0;i<length;i++)
        {
            if(maps.count(nums[i]))//假设在maps中找到了该元素。推断它们位置是否小于等于k
            {
                if((i-maps[nums[i]])<=k) 
                    return true;
            }
            maps[nums[i]]=i;
        }
        return false;
    }

};

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117015.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月12日 上午6:00
下一篇 2022年1月12日 上午6:00


相关推荐

  • pycharm卸载不干净导致新安装的pycharm无法打开的问题

    pycharm卸载不干净导致新安装的pycharm无法打开的问题个人的经历 之前下载的 pycharm 版本不合适 就直接把下载目录的所有文件直接删了 所以显而易见的没有卸载完全 桌面快捷方式都还在 再下新版本的 pycharm 之后 图省事 把新的也安在了旧的相同的目录下 结果安装完成后无论怎么点击 exe 文件 都打不开 上网查询后发现是没卸载干净 但是网上各种经验看的我眼晕 我就自己试了一下 没想到还成功了 解决方法 我打开新安装的 pycharm 的 bin 目录下的 uninstall exe 两个选项全勾 卸载干净了新下的这个之后 因

    2026年3月27日
    2
  • MacOS Pycharm 配置 anaconda 环境

    MacOS Pycharm 配置 anaconda 环境Mac 第一次配置 anaconda 时费了我不少时间 做个总结 打开 pycharm 创建项目注意 为了使用 conda 已经装好的 base root 的库 我们要选择 Previouslyco 作为第一次配置 不会出现下图已经选好的 py3 9 而是为空 按照截图里的标记选择进入详情页 继续选择只要是 mac 的用户根据以下的路径就可找到 py 的解释器根据上图的路径找到 conda 的 py 解释器就可 下面就是一路点击 OK 创建项

    2026年3月27日
    3
  • 喂饭级教程!用阿里云三步完成Clawdbot部署

    喂饭级教程!用阿里云三步完成Clawdbot部署

    2026年3月13日
    2
  • jpeg图像压缩算法流程详解_图像压缩最快算法

    jpeg图像压缩算法流程详解_图像压缩最快算法JPEG是Joint Photographic Exports Group的英文缩写,中文称之为联合图像专家小组。该小组隶属于ISO国际标准化组织,主要负责定制静态数字图像的编码方法,即所谓的JPEG算法。JPEG专家组开发了两种基本的压缩算法、两种熵编码方法、四种编码模式。如下所示:压缩算法:(1)有损的离散余弦变换DCT(Discrete Cosine Transform)(2)无

    2025年7月6日
    5
  • 原来jdk自带了这么好玩的工具 > JPS使用教程「建议收藏」

    原来jdk自带了这么好玩的工具 > JPS使用教程「建议收藏」jps(JavaVirtualMachineProcessStatusTool)jsp是java提供的一个显示当前所有java进程pid的命令,适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。jps也是一样,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实

    2026年1月30日
    5
  • Python使用UDP实现720p视频传输「建议收藏」

    使用UDP完成720p以上高清视频传输1.项目背景2.解决方案3.实现细节3.1TCP/UDP的选择3.2图片分片算法3.3JPG压缩3.4接收队列4.遇到的坑及解决办法4.1.Windows防火墙4.2.路由器网络频段4.3.Wifi配置4.4.硬件瓶颈4.5.OpenCV读取摄像头大坑4.6.Socket卡顿5.尚未BugFree的功能5.1使用TCP回传帧率…

    2022年4月7日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号