一、数组---存在重复元素2

2020-12-12 21:06

阅读:415

标签:count   als   复杂   return   for   code   bool   键值   遍历   

给定一个整数数组和一个整数 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(vectorint>& nums, int k){
 3     bool find=false;
 4     if(nums.size()==0) return false;
 5     for(int i=0;i){
 6         for(int j=nums.sieze();j>i && not find;j--){
 7             if(nums[i]==nums[j] && j-ireturn find=true;//设置一个标记find,这样就可以跳出多重循环
 8         }
 9     }
10     return find;
11 }
 1 //使用map构建哈希表,键值对 :数组元素-索引
 2 bool containsNearbyDuplicate(vectorint>& nums,int k){
 3     if(nums.size()==0) return false;
 4     mapint,int> mymap;
 5     for(int i=0;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]] return true;
11             else a[nums[i]] = i;
12         }
13         else mymap.insert(mapint,int>::value_type(nums[i],i))
14     }
15     return false;
16 }

 

一、数组---存在重复元素2

标签:count   als   复杂   return   for   code   bool   键值   遍历   

原文地址:https://www.cnblogs.com/pacino12134/p/11000189.html

上一篇:Python 复习

下一篇:Java Genericity


评论


亲,登录后才可以留言!