码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-06-10 21:12:45      阅读:164      评论:0      收藏:0      [点我收藏+]

标签: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(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 }

 

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!