Leetcode 219. 存在重复元素 II
说明:
首先,这是一道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的更多相关文章
- Java实现 LeetCode 219 存在重复元素 II(二)
219. 存在重复元素 II 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示 ...
- LeetCode 219: 存在重复元素 II Contains Duplicate II
题目: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. Given an ...
- 力扣(LeetCode)219. 存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示例 1: 输入: nums = ...
- 219. 存在重复元素 II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k. 示例 1: 输入: nums = ...
- 【每日算法】存在重复元素 II
题目描述 这是 LeetCode 上的 219. 存在重复元素 II, 难度为 [简单] 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nu ...
- LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)
82. 删除排序链表中的重复元素 II 82. Remove Duplicates from Sorted List II 题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有 ...
- LeetCode 82,考察你的基本功,在有序链表中删除重复元素II
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第51篇文章,我们来看LeetCode第82题,删除有序链表中的重复元素II(Remove Duplicates ...
- Java实现 LeetCode 82 删除排序链表中的重复元素 II(二)
82. 删除排序链表中的重复元素 II 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4- ...
- leetcode 83. 删除排序链表中的重复元素 及 82. 删除排序链表中的重复元素 II
83. 删除排序链表中的重复元素 问题描述 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: ...
随机推荐
- 【01】Python:故事从这里开始
写在前面的话 最近在 Github 上面看到一个 100 天学习 Python 项目: https://github.com/jackfrued/Python-100-Days 于是便想着抽时间将自己 ...
- Fuck SELinux :rsyslog无法生成log文件,原来是selinux机制搞的鬼!
Fuck SELinux 一万年! 关闭即可.
- 使用Docker之容器的创建、删除
假设我们现在拥有以下镜像 1:启动一个简单容器 docker container run //用于启动一个容器 -it //是容器具有交互性,并与终端进行连接 命令:docker c ...
- jquery点击放大图片
参考地址:https://blog.csdn.net/qq_42249896/article/details/86569636 一.应用场景:点击图片可以对图片进行放大显示. 二.实现代码: 说明:我 ...
- 【翻译】Tusdotnet中文文档(3)自定义功能和相关技术
自定义功能和相关技术 本篇按照如下结构翻译 自定义功能 自定义数据仓库 相关技术 架构和总体概念 自定义数据仓库 tusdotnet附带一个存储库TusDiskStore,它将文件保存在磁盘上的一个目 ...
- PIE SDK归一化水体指数法
1.算法功能简介 归一化指数法(NDWI(Normalized Difference Water Index,归一化水指数)),用遥感影像的特定波段进行归一化差值处理,以凸显影像中的水体信息. 其表达 ...
- 2019-09-17 thinkphp网页静态化
public function details(){ $pid = I('get.goods_id'); $filename = "details_".$pid.".ht ...
- Vue-Cli 3.x 创建的项目中对 import 引入的 CSS 样式启用 autoprefixer
问题描述: Vue-Cli 3.x 默认开启了 autoprefixer,但对于在 main.js 中通过 import 引入的 CSS 并没有自动添加前缀 分析原因: autoprefixer 在项 ...
- JavaWeb 发送邮件
我们可以使用第三方的邮箱服务器来发送邮件. 常用的邮件传输协议有2种:POP3/SMTP.IMAP/SMTP. POP和IMAP的区别:在邮箱客户端的操作,比如移动邮件.标记已读,如果使用POP,是不 ...
- mybatis中的高级查询
Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ...