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


相关推荐

  • 第二套17

    第二套17

    2022年1月31日
    35
  • 执行top命令(linux命令详解之df命令)

    首先介绍top中一些字段的含义:VIRT:virtualmemoryusage虚拟内存1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量RES:residentmemoryusage常驻内存1、进程当前使用的内存大小,但不包括swapout2、包含其他进程的共享3、如果申请100…

    2022年4月11日
    121
  • Centos安装redis_redis编译安装

    Centos安装redis_redis编译安装Centos安装redis61、下载安装包https://redis.io/2、上传安装包到服务器opt下3、解压安装包tar-xzvfredis-6.2.5.tar.gz4、解压安装包重命名mvredis-6.2.5.tar.gzredis5、进入安装包cdredis6、编译检测maketest7、安装makePREFIX=/opt/redis6install8、启动cd/opt/redis6/bin./redis-server#备注:想后台运

    2022年9月7日
    0
  • python 拼接字符串字作为字符串使用(python连接字符串)

    Python字符串拼接数字的方法发布时间:2020-08-0515:40:44来源:亿速云阅读:99作者:小新这篇文章将为大家详细讲解有关Python字符串拼接数字的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python字符串拼接数字在某些特殊场景中,我们需要将字符串与数字进行拼接,而Python不允许直接拼接数字和字符串,程序必须先将数字转换成字…

    2022年4月12日
    93
  • 按键精灵q语言基础教学怎么看不了_按键精灵脚本是用什么语言写

    按键精灵q语言基础教学怎么看不了_按键精灵脚本是用什么语言写一、数据类型1.1数据类型可以表示一切的类型variant逻辑类型:boolean(true,false)数学类型: 整数:byte(0-255),integer(-32768-32767),lon

    2022年8月1日
    1
  • JavaScript阶乘算法[通俗易懂]

    JavaScript阶乘算法[通俗易懂]题目:计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成n!例如:5!=1*2*3*4*5=120使用递归实现:functionfactorialize(num){varresult=1;for(vari=1;i<=num;i++){…

    2022年7月24日
    10

发表回复

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

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