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: 输入: ...
 
随机推荐
- WPF 精修篇 事件触发器
			
原文:WPF 精修篇 事件触发器 事件触发器 一般使用的就是动画 <Grid> <TextBlock Text="事件触发器" Opacity="0.2 ...
 - mvc视图双下拉框联动
			
html部分的代码 <tr class="trs"> <td class="item1"><div class="ite ...
 - input file 保存图片
			
Request.File["控件名称"].FileName 文件名称(没有路径) Request.File["控件名称"].SaveAs("路径名称& ...
 - 数据库xp_cmdshell使用
			
首先也开启组件. sp_configure reconfigure go sp_configure reconfigure go 删除本地文件,注意是删除数据库所在的服务器的本地文件. exec ma ...
 - 阅读prettytable 一些代码、get、set 检查参数
			
阅读代码是因为我发现官方教程里的代码在本地不能用,所以就通过”查看定义“转到了源代码里. 通过阅读源代码,查看方法内是否有教程中所说的方法名和参数名,然后再通过”查看引用“来试图了解函数的流程,如果没 ...
 - js正则只能包含小写数字分割符,切不能以分割符开头和结尾
			
const version = /^(?!_)(?!.*-$)[a-z0-9_]+$/; 1.一个正则表达式,只含有数字.小写字母.中划线不能以中划线开头和结尾: ^(?!-)(?!.*-$)[a-z ...
 - 为什么MES实施起来效果不佳?
			
原因一:我国制造业存在管理基础的先天不足 我国企业与发达国家企业在管理发展上,存在较大的差别.发达制造国家经历了管理探索.发展.成熟.再提高的全过程,从管理基础的奠定到思想认识的深刻程度,都是我国所无 ...
 - 理解AMD ,CMD,CommonJS规范
			
https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...
 - Modern Cpp记录
			
#include <iostream> # include <set> #include <chrono> #ifndef UNUSED #define UNUSE ...
 - Bash Shell中的特殊位置变量及其应用
			
Bash Shell中的特殊位置变量及其应用 众所周知bash shell中有许多特殊的位置变量,灵活使用它们可以更好地发挥Shell脚本的功用. 即位置变量:$1,$2,...来表示,用于让脚本在脚 ...