leetcode_219题——Contains Duplicate II(哈希表)

Contains Duplicate II

Total Accepted: 13284 Total Submissions: 51898My Submissions

Question Solution

Given an array of integers and an integer k, find out whether there there are two distinct indices i and j in the array such that nums[i] = nums[j] and the difference between iand j is at most k.

Hide Tags

Array Hash Table

Have you met this question in a real interview?

Yes

No

Discuss

这道题我采用的是map哈希表来做的,在这道题中,采用哈希表来记录已近遍历过的数,

题目需要求的是在这个数组中是否存在两个相同的数,他们之间的距离小于k

#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<utility>
using namespace std;

#define TRUE 1
#define FALSE 0

bool containsNearbyDuplicate(vector<int>& nums, int k){
	if(nums.empty()||nums.size()==1)
		return FALSE;
	int len=nums.size();
	map<int,int> ma;
	ma.insert(map<int,int>::value_type(nums[0],0));

	for(int i=1;i<len;i++)
	{
		int si=ma.count(nums[i]);
		if(si==1)
		{
			map<int,int>::iterator iter=ma.find(nums[i]);
			int i1=iter->second;
			if(i-i1<=k)
				return TRUE;
			ma.erase(iter);
		}
		ma.insert(map<int,int>::value_type(nums[i],i));
	}
	return FALSE;
}

int main()
{
	int ary[10]={1,0,1,1};
	vector<int> nums(ary,ary+4);
	cout<<containsNearbyDuplicate(nums,1)<<endl;
}

  

时间: 2024-10-26 02:52:42

leetcode_219题——Contains Duplicate II(哈希表)的相关文章

242题——Valid Anagram (哈希表)

Valid Anagram Total Accepted: 9718 Total Submissions: 27840My Submissions Question Solution Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = "anagram", t = "nagaram", return true.s = &qu

[LC]219题 Contains Duplicate II (存在重复元素 II )

①英文题目: Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k. Example 1: Input: nums = [1,2,3,1], k = 3Ou

leetcode_136题——Single Number(哈希表hashtable,multiset)

#include<iostream> //#include<bitset> //#include<map> #include<set> using namespace std; /*这道题,直接采用multiset来做,就太简单了,没啥好说的,就是全导进去,然后count下 就OK了,因为在set中查找都O(1)所以呢是线性的算法复杂度 */ int singleNumber(int A[], int n) { multiset<int> tem

哈希表的理解

哈希表是种数据结构,它可以提供快速的插入操作和查找操作.第一次接触哈希表时,它的优点多得让人难以置信.不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级.实际上,这只需要几条机器指令. 对哈希表的使用者一一人来说,这是一瞬间的事.哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要O(N)的时间级.哈希表不仅速度快,编程实现也相对容易. 哈希表也有一些缺点它是基于数组的,

哈希表等概率情况下查找成功和查找不成功的平均查找长度的计算

最近复习了下数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时比较迷茫,不知道到底是怎么计算出来的.现在通过查阅资料终于知道如何计算了,所以记录下来以供以后查阅. 下面看下2010年2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题中一个考哈希表的题. Question1: 将关键字序列(7.8.30.11.18.9.14)散列存储到散列表中.散列表的存储空间是一个下标从0开始的一维数组,散列函数为:      H(key) = (keyx3

noip模拟赛 好元素 哈希表的第一题

这是一道关于 题2好元素 2s [问题描述] 小A一直认为,如果在一个由N个整数组成的数列{An}中,存在以下情况: Am+An+Ap = Ai (1 <= m, n, p < i <= N , m,n,p可以相同),那么Ai就是一个好元素. 现在小A有一个数列,请你计算数列中好元素的数目 [输入格式] 第一行只有一个正整数N,意义如上. 第二行包含N个整数,表示数列{An}. [输出格式] 输出一个整数,表示这个数列中好元素的个数. [输入样例] Sample1 2 1 3 Sampl

【LeetCode】哈希表 hash_table(共88题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target . 题解:我这次最大范围的优化代码, hash-table + one pass,时间复杂度 O(N),空间复杂度 O(N).重点在于动态找,一边生成hash-tabl

[leetcode 40. 组合总和 II] 不排序使用哈希表+dfs递归 vs 排序栈+回溯

题目描述 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用一次. 说明: 所有数字(包括目标数)都是正整数. 解集不能包含重复的组合. 示例 1: 输入: candidates = [10,1,2,7,6,1,5], target = 8, 所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ] 示例 2: 输入

lettcode 上的几道哈希表与链表组合的数据结构题

目录 LRU缓存 LFU缓存 全O(1)的数据结构 下面这几道题都要求在O(1)时间内完成每种操作. LRU缓存 LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰. 做法: 使用先进先出的队列,队尾的元素即是可能要淘汰的. 由于需要查找某个key在队列中的