说明:

  首先,这是一道Easy题,我天!但是题意理解还是很多坑~

题目描述:

  给定一个整数数组和一个整数 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

理解:

  寻找每个元素最先出现的位置和最终出现的位置,如果i和j不同,取其绝对值,看是否可以达到k,如果等于k,说明满足题意!

 struct node {
int max = -;
int min = -;
};
 bool containsNearbyDuplicate_bak(vector<int>& nums, int k) {
//两个map,一个存最小下标,一个存最大下标
map<int, int> mp; //用于统计出现的字符个数
map<int, node> maxDisMap; //用于存放距离
int i,res=;
for (i = ; i<nums.size(); i++)
{
mp[nums[i]]++;
if (mp[nums[i]] == )
{
//首次出现,存入距离
maxDisMap[nums[i]].min = i;
}
else if (mp[nums[i]] > ) {
maxDisMap[nums[i]].max = i;
}
}
//遍历数组中的最大最小值的差值
map<int, node>::iterator it;
for (it = maxDisMap.begin(); it != maxDisMap.end(); it++)
{
if (it->second.max - it->second.min > res)
res = it->second.max - it->second.min;
}
if (res == k)
return true;
return false;
}

  那么问题来了,对于示例2而言,第一个1出现的位置索引是0,最后一个出现的位置索引是3,其差的最大绝对值为3,大于给定的k,为什么返回true???

  发现讨论区里也有很多类似的问题在讨论

  

  这样看来,只要保证存在小于等于k的两个绝对值的差,即可,修改代码如下:

 bool containsNearbyDuplicate(vector<int>& nums, int k) {
//两个map,一个存最小下标,一个存最大下标
map<int, int> mp; //用于统计出现的字符个数
map<int, node> maxDisMap; //用于存放距离
int i, res = INT_MAX;
for (i = ; i<nums.size(); i++)
{
mp[nums[i]]++;
if (mp[nums[i]] == )
{
//首次出现,最大最小都存起来
maxDisMap[nums[i]].min = i;
maxDisMap[nums[i]].max = i;
}
else if (mp[nums[i]] == ) {
maxDisMap[nums[i]].max = i; //更新最大值
if (maxDisMap[nums[i]].max - maxDisMap[nums[i]].min <= k)
return true;
}
else {
maxDisMap[nums[i]].min = maxDisMap[nums[i]].max; //往后推,只记录相邻的两个相同值
maxDisMap[nums[i]].max = i;
if (maxDisMap[nums[i]].max - maxDisMap[nums[i]].min <= k)
return true;
}
}
return false;
}

  等待学习新的方法~~~

最新文章

  1. WebAPI
  2. HTTP Status
  3. 150929-拖延高于懒-HTML(End)
  4. 高性能的数据压缩库libzling
  5. sql 随机抽取几条数据的方法 推荐
  6. 通过GPS数据反向地理信息编码, 得到当前位置信息
  7. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)
  8. C语言面向对象风格编程
  9. C#使用itextsharp生成PDF文件
  10. Typecho中文验证码Captcha插件
  11. 无法加载shockwave flash
  12. 使用D3 Geo模块画澳大利亚地图
  13. 使用VS Code开发调试.NET Core 2.0
  14. UnicodeDecodeError: &#39;utf-8&#39; codec can&#39;t decode byte 0xce in position 52: invalid continuation byte
  15. Python函数式编程之闭包
  16. 数据结构(六)查找---多路查找树(B+树)
  17. 【Little Demo】左右按钮tab选项卡双切换
  18. Spring Cloud各组件超时总结
  19. 1. git基础
  20. E. Turn Off The TV Educational Codeforces Round 29

热门文章

  1. 实用 PXE 配置:不断更新中...
  2. torch.max
  3. windows下生成ssl
  4. OpenGL笔记(4)纹理
  5. DISK2VHD 转win2008 无法启动
  6. 数据库系列(五)之 mysql的伸缩性
  7. MYSQL中IN,INSTR,FIND_IN_SET函数效率比较(转)
  8. [转]C++ 堆栈溢出的原因以及可行的解决方法
  9. cs1.6 8倍镜
  10. FPM八:FPM TREE