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

开始刷leetcode day63:Contains Duplicate III

2015-07-13 06:04 507 查看
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.

Java:

public class Solution {

public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {

TreeSet<Integer> treeset = new TreeSet<Integer>();

for(int i=0; i< nums.length; i++)

{

if(!treeset.isEmpty())

{

if(treeset.floor(nums[i]) != null && nums[i] <= treeset.floor(nums[i])+t)

return true;

else if(treeset.ceiling(nums[i]) != null && treeset.ceiling(nums[i]) - nums[i]<=t)

return true;

//find the highest value inside the set that is less than nums[i] or the smallest value bigger than nums[i]

}

treeset.add(nums[i]);

if(i>=k)

{

treeset.remove(nums[i-k]);

}

}

return false;

}

}

注意,使用了窗口用于维持size k。

使用了treeset的两个函数,floor 和ceiling

nums[i] <= treeset.floor(nums[i])+t 而不是 nums[i] - treeset.floor(nums[i]) <= t 特例为 [-1,Integer.Max]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: