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: 输入: ...
随机推荐
- C#查找指定路径下的所有指定文件,并读取
string path="指定路径"; string filename =“需要查找的文件名.csv"; List<string> lineStringLis ...
- C#中 char、byte、string
var str = "我是中国人";var str1 = "abc"; char[] chars = str.ToCharArray();char[] char ...
- tcp / udp 协议及其实现的socket
一.tcp协议 1.1 基本知识 特点: 可靠,慢,全双工通信 建立连接时:三次握手 断开连接时:四次挥手 在建立起连接之后 发送的每一条信息都有回执 为了保证数据的完整性,还有重传机制 长连接:会一 ...
- JavaWeb 过滤敏感词汇
提交的表单数据,常常要检查有没有敏感词汇,如果有,需要给出提示,或者替换为*. 检查.替换敏感词汇有3种常用的方式 (1)在Servlet中操作. (2)在Filter中先检查.如果要替换敏感词汇,r ...
- Docker容器进入的4种方式以及tomcat查看日志
docker logs 查看实时日志 原文:http://www.cnblogs.com/qufanblog/p/6927411.html docker logs -f -t --since=&quo ...
- 分布式文件系统HDFS练习
本次作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3310 start-all.sh确保开启服务 在HDFS中为hadoop ...
- Python--RE--?
?在re中默认匹配前一个字符0次或者1次 比如: aal? 默认匹配aal,或者aa 即整体匹配前一个字符串,但是可以舍弃最近的一个字符或者不舍弃 re模块 常用正则表达式符号 '.' 默认匹配 ...
- 部署ceph存储集群及块设备测试
集群环境 配置基础环境 添加ceph.repo wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishang ...
- Linux操作系统安全-OpenSSL工具常用命令介绍
Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...
- 我以为我对Kafka很了解,直到我看了此文章
Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础. 现在它已被多家不同类型的公司 ...