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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS7卸载mysql

    CentOS7卸载mysql前言 最近搭建mysql主从,两个虚拟机中的mysql版本不一致,所以就准备卸载其中一个。步骤1.查看mysql安装rpm-qa|grep-imysql2.卸载前关闭mysql服务 rpm-ev–nodepsmysql-community-release-el7-5.noarch rpm-ev–nodepsmysql-community-common-5.6.38-2.e…

    2022年6月22日
    39
  • linux根分区满了如何处理,查找大文件方法[通俗易懂]

    linux根分区满了如何处理,查找大文件方法[通俗易懂]linux根分区满了如何处理,查找大文件方法

    2022年4月21日
    144
  • pmp证书(职称证书丢失补办流程)

    前言OpenSSL中的概念很多,网上的文档也非常的多,在这里做一下总结,首先明确以下内容。Https访问完整流程1)客户端发起一个https请求,连接到服务器的443端口。2)服务端把自己的信息以数字证书的形式返回给客户端(证书内容有密钥公钥,网站地址,证书颁发机构,失效日期等)。证书中有一个公钥来加密信息,私钥由服务器持有。3)验证证书的合法性客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。4)生成随机密码(RSA签名)如果验

    2022年4月18日
    128
  • SQLServer2019安装教程「建议收藏」

    打开应用程序点击安装,点第一个全新得SQLserver独立安装下一步这里可能要等他扫描一下,下一步执行全新安装developer和express选哪一个都可以,(,一共有三个,不选Evaluation就可以,虽然可以用,但是他有180天的期限)接受条款,才能点击下一步选择数据库引擎,点击下一步(需要的可以换目录,但最好别换,换到别的(机械)盘可能效率会低)如果这里报错…

    2022年4月17日
    93
  • java中PreparedStatement和Statement详细讲解

    java中PreparedStatement和Statement详细讲解大家都知道PreparedStatement对象可以防止sql注入,而Statement不能防止sql注入,那么大家知道为什么PreparedStatement对象可以防止sql注入…

    2022年4月28日
    52
  • MySQL 系列(四)主从复制、备份恢复方案生产环境实战[通俗易懂]

    MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    2022年2月23日
    53

发表回复

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

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