Contains Duplicate III

来源:互联网 发布:穿越火线网络异常23 2 编辑:程序博客网 时间:2024/04/28 12:44

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


0 0