Contains Duplicate III

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.

用一个双层循环明显超时。

别人用同样的时间O(nlog(k)),但是用TreeSet实现。TreeSet具有排序功能,能够

返回在某个区间的set。

public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
	if(k<1||t<0)
		return false;
	TreeSet<Long> set=new TreeSet<>();
	for(int i=0;i<nums.length;i++){
		long left=(long)nums[i]-t;
		long right=(long)nums[i]+t+1;
		SortedSet<Long> subSet=set.subSet(left, right);
		if(!subSet.isEmpty())
			return true;
		set.add((long) nums[i]);
		if(i>=k)
			set.remove((long)nums[i-k]);
	}
	return false;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值