[leetcode][hash] Contains Duplicate III

原创 2015年07月08日 16:22:19

题目:

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

分析:

1、维护一个长度为k的窗口

2.要满足条件|nums[j] - num[i]| <= t,即nums[j] >= nums[i]-t && nums[j] <= nums[i]+t;

set的lower_bound(nums[i]-t)函数可以找到大于等于nums[i]-t的最小数,如果该数小于nums[i]+t,那么这个数和nums[i]就是满足条件的数对。

3.注意这里有int数的相加,和可能越界,所以set必须使用long long型

class Solution {
public:
    bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
	if (nums.size() < 2 || k <= 0 || t < 0) return false;
	int start = 0, end = 0;
	set<long long> hashTable;
	hashTable.insert(nums[0]);
	for (int i = 1; i < nums.size(); ++i){
		set<long long>::iterator iter = hashTable.lower_bound(nums[i] - t);
		if (iter != hashTable.end() && *iter <= (long long)nums[i] + t) return true;
		hashTable.insert(nums[i]);
		end = i;
		if (end - start == k){
			hashTable.erase(nums[start]);
			++start;
		}
	}
	return false;
}
};


leetcode 220: Contains Duplicate III

leetcode 220: Contains Duplicate III java c++ python
  • xudli
  • xudli
  • 2015年06月02日 08:31
  • 17765

Leetcode 220 Contains Duplicate III

1. 问题描述  给定一个整数数组nums[],查找是否存在两个下标i和j,满足|numsi−numsj|≤t|nums_i-nums_j| \le t 且 |i−j|≤k|i-j| \le k。2....
  • Jeanphorn
  • Jeanphorn
  • 2015年06月24日 19:38
  • 7846

[leetcode] 220. Contains Duplicate III 解题报告

题目链接:https://leetcode.com/problems/contains-duplicate-iii/ Given an array of integers, find out wh...
  • qq508618087
  • qq508618087
  • 2016年01月30日 11:09
  • 1105

Leetcode 220. Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array suc...
  • xinqrs01
  • xinqrs01
  • 2017年02月10日 14:08
  • 209

(leetcode)contains duplicateIII[java]

题目描述:Given an array of integers, find out whether there are two distinct indices i and j in the ar...
  • zdavb
  • zdavb
  • 2015年07月03日 23:36
  • 472

leetcode笔记:Contains Duplicate III

题目大意是,给定一个整数数组,判断其中是否存在两个不同的下标i和j,满足:| nums[i] - nums[j] | ...
  • liyuefeilong
  • liyuefeilong
  • 2016年02月26日 15:43
  • 1527

[leetcode 220]Contains Duplicate III

Given an array of integers, find out whether there are two distinct indices i and j in the array s...
  • ER_Plough
  • ER_Plough
  • 2015年09月04日 15:17
  • 436

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3428

LeetCode 220. Contains Duplicate III

问题描述: Given an array of integers, find out whether there are two distinct indices i and j in the ...
  • u014221279
  • u014221279
  • 2016年06月24日 11:21
  • 240

LeetCode 217:Contains Duplicate

Given an array of integers, find if the array contains any duplicates. Your function should return t...
  • sunao2002002
  • sunao2002002
  • 2015年05月31日 18:37
  • 7023
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode][hash] Contains Duplicate III
举报原因:
原因补充:

(最多只允许输入30个字)