码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Contains Duplicate III

时间:2015-10-31 00:25:30      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里:https://leetcode.com/problems/contains-duplicate-iii/

借助于TreeSet的subSet函数,看是否有[nums[i]-t, nums[i]+t+1)范围内的数。

维护一个长度为k的窗口,超过了这个长度时就把前面的元素从window中拿出去。

若在window长度范围内,就把nums[i]加进window中。

Note: 若i>=k, 就把这个nums[i-k]从window中拿出去,因为i是从0开始, k是从1开始。

subSet返回的是SortSet型object, 范围是[low,high), 注意是左闭右开。

Time Complexity is O(nlogk). window 的长度为k, TreeSet的contains, insert, delete用时都是O(log k). Space O(k).

AC Java:

 1 public class Solution {
 2     public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {
 3         if(nums == null || nums.length < 2 || k < 1 || t < 0){
 4             return false;
 5         }
 6         
 7         SortedSet<Long> window = new TreeSet<Long>();
 8         for(int i = 0; i<nums.length; i++){
 9             SortedSet<Long> subSet = window.subSet((long)nums[i]-t, (long)nums[i]+t+1);
10             if(!subSet.isEmpty()){
11                 return true;
12             }
13             if(i>=k){
14                 window.remove((long)nums[i-k]);
15             }
16             window.add((long)nums[i]);
17         }
18         return false;
19     }
20 }

 

LeetCode Contains Duplicate III

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4924607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!