关闭

[leetcode][hash] Contains Duplicate III

131人阅读 评论(0) 收藏 举报
分类:

题目:

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;
}
};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:32734次
    • 积分:2080
    • 等级:
    • 排名:第18452名
    • 原创:182篇
    • 转载:8篇
    • 译文:0篇
    • 评论:2条
    最新评论