zoukankan      html  css  js  c++  java
  • 一、数组---存在重复元素2

    给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。

    示例 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 //自己的想法,时间复杂度有点高,超时了
     2 bool containsNearbyDuplicate(vector<int>& nums, int k){
     3     bool find=false;
     4     if(nums.size()==0) return false;
     5     for(int i=0;i<nums.size() && not find;i++){
     6         for(int j=nums.sieze();j>i && not find;j--){
     7             if(nums[i]==nums[j] && j-i<=k )  return find=true;//设置一个标记find,这样就可以跳出多重循环
     8         }
     9     }
    10     return find;
    11 }
     1 //使用map构建哈希表,键值对 :数组元素-索引
     2 bool containsNearbyDuplicate(vector<int>& nums,int k){
     3     if(nums.size()==0) return false;
     4     map<int,int> mymap;
     5     for(int i=0;i<nums.size();i++){
     6         //如果map中的valve存在这个键,判断索引和这个值的差值是否为小于等于k
     7         //如果大于,那就更新索引值,这样就继续向后遍历了,因为要找的是小于等于k,大于寿命相差的太远了,所以要索引移动到更近一点
     8         if(a.count(nums[i])){
     9             //i是新的i,nums[i]里面的i是之前存在里面的,是旧的i
    10             if(i - a[nums[i]] <= k) return true;
    11             else a[nums[i]] = i;
    12         }
    13         else mymap.insert(map<int,int>::value_type(nums[i],i))
    14     }
    15     return false;
    16 }
  • 相关阅读:
    服务器端和客户端有什么区别
    在 CSS 中,width 和 height 指的是内容区域的宽度和高度
    弹出框
    cdn 查询库
    超链接 a的小手
    jsonk可以传递boolean
    list,set中可以存放Object类型对象
    $("p").click();触发每一个匹配元素的click事件
    jquery选择器中的逗号
    <input type="text" onfocus="func();" onblur="func1();"/>
  • 原文地址:https://www.cnblogs.com/pacino12134/p/11000189.html
Copyright © 2011-2022 走看看