您的位置:首页 > 大数据 > 人工智能

*LeetCode-Contains Duplicate III

2015-10-06 06:20 483 查看
本来想像第二道题一样用一个k 大小的set维持一个连续的window 然后每次取这个set最大值最小值 然后和下一个数取diff

但是超时了

需要用tree set 有两个很有用的function floor 和 ceiling 分别

Returns the greatest element in this set less than or equal to the given element, or 
null
 if
there is no such element.

Returns the least element in this set greater than or equal to the given element, or 
null
 if
there is no such element.

所以判断条件是 找到这样的floor 并且floor的方向正确 大于num[i]即表示在num [ i ]到 num[ i ] +  k找到了一个数

或者找到了在num [ i ] -k 到 num[ i ] 找到了一个数

注意每次先判断这些 然后没有return的话 add这个num[i]然后假如个数超了 就remove头上一个

public class Solution {
public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
TreeSet<Integer> set = new TreeSet<Integer>();
if ( nums == null || nums.length == 0 || k <= 0 )
return false;
for ( int i = 0; i < nums.length; i ++ ){
Integer floor = set.floor ( nums[i] + t );
Integer ceiling = set.ceiling ( nums[i] - t );
if ( (floor != null && floor >= nums[i]) || (ceiling != null && ceiling <= nums[i]) )
return true;
set.add ( nums[ i ] );
if ( i >= k ){
set.remove( nums[ i - k ] );
}
}
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: