说明:

  首先,这是一道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;
}

  等待学习新的方法~~~

Leetcode 219. 存在重复元素 II的更多相关文章

  1. Java实现 LeetCode 219 存在重复元素 II(二)

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

  2. LeetCode 219: 存在重复元素 II Contains Duplicate II

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

  3. 力扣(LeetCode)219. 存在重复元素 II

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

  4. 219. 存在重复元素 II

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

  5. 【每日算法】存在重复元素 II

    题目描述 这是 LeetCode 上的 219. 存在重复元素 II, 难度为 [简单] 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nu ...

  6. LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)

    82. 删除排序链表中的重复元素 II 82. Remove Duplicates from Sorted List II 题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有 ...

  7. LeetCode 82,考察你的基本功,在有序链表中删除重复元素II

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第51篇文章,我们来看LeetCode第82题,删除有序链表中的重复元素II(Remove Duplicates ...

  8. Java实现 LeetCode 82 删除排序链表中的重复元素 II(二)

    82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4- ...

  9. leetcode 83. 删除排序链表中的重复元素 及 82. 删除排序链表中的重复元素 II

    83. 删除排序链表中的重复元素 问题描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: ...

随机推荐

  1. python爬取豆瓣电影首页超链接

    什么是爬虫?  我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链 ...

  2. ASP.NET Core MVC 中两种路由的简单配置

    1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在C ...

  3. 学习笔记之UML ( Unified Modeling Language )

    Unified Modeling Language - Wikipedia https://en.wikipedia.org/wiki/Unified_Modeling_Language The Un ...

  4. vue展示md文件,前端读取展示markdown文件

    方案1:每次都需要重新打包,每次修改都需要build 直接使用require + v-html: 核心代码如下: 1. 首先需要添加MD文件的loader就是 markdown-loader npm ...

  5. Markdown随笔

    Markdown随笔 这两天兴致来了,想尝试一下使用 Markdown. 写这篇博客时我用的是: MarkdownPad 2 关于 MarkdownPad 2 的安装破解网上有很多教程了,这里我就不赘 ...

  6. loadrunner 基本操作

    1.录制(录制选项) 2.回放(运行时设置) 3.添加事物 4.参数化 5.内容检查 6.添加集合点 1.在脚本中添加集合点函数如下: lr_rendezvous("集合点") / ...

  7. Class版本号和Java版本对应关系

    1.背景 版本号不对,会报错,如下 2.版本对应情况 JDK 1.8 = 52  JDK 1.7 = 51 JDK 1.6 =50 JDK 1.5 = 49  JDK 1.4 = 48  JDK 1. ...

  8. 高并发&高可用系统的常见应对策略

    解耦神器:MQ MQ是分布式架构中的解耦神器,应用非常普遍.有些分布式事务也是利用MQ来做的.由于其高吞吐量,在一些业务比较复杂的情况,可以先做基本的数据验证,然后将数据放入MQ,由消费者异步去处理后 ...

  9. 交叉编译支持SVE ACLE的gcc

    最近在学习AArch64的SVE技术时,发现目前可以在网上找到的gcc版本都不支持SVE intrinsic方式调用,在看文档时发现,GCC要到2020年的GCC10时才会支持: 在github上看到 ...

  10. Python 的版本控制

    版本控制工具的差异 这里介绍几个工具:pyenv.pyvenv. venv.virtualenv.pyenv-virtualenv virtualenv 是针对python的包的多版本管理,通过将py ...