您的位置:首页 > 编程语言 > Java开发

leetcode 220. Contains Duplicate III---java

2018-02-23 23:34 316 查看
题目:
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i]and nums[j] is at most t and the absolute difference between i and j is at most k.

给出一个整形数组nums,是否存在索引i和j,使得nums[i],nums[j]之间的差不超过给定的整数值t,且i和j之间的差不超过k。
思路:
参照219题,另需注意:1.判断t的取值,不允许<0;2.nums[j]的取值范围为nums[i] - t ~nums[i] + t;可以利用SortedSet中的subSet方法。
程序:
class Solution {
    public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
        
        TreeSet <Long>record = new TreeSet<Long>();
        SortedSet <Long>sort = new TreeSet<Long>();
        
        if(t < 0) 
            return false;
        
        for(int i = 0; i < nums.length; i++){
            sort = record.subSet((long)nums[i]-(long)t, (long)nums[i]+(long)t+(long)1);
            if(!sort.isEmpty())
                return true;
            
            record.add((long)nums[i]);
            
            if(record.size() >= k+1 )
                record.remove((long)nums[i-k]);
        }
        
        return false;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: