首页 > 其他 > 详细

[刷题] LeetCode 220 Contains Duplicate III

时间:2020-04-03 11:38:05      阅读:64      评论:0      收藏:0      [点我收藏+]

要求

  • 给出整型数组nums和整数k,是否存在索引i和j
  • 使得nums[i]和nums[j]之差不超过t,且i和j之差不超过k

思路

  • 建立k个元素的有序查找表
  • 每次有新元素加入,寻找查找表中大于 nums[i]-t 的最小值,若存在且此值小于 nums[i]+t,则目标元素存在
  • 时间(nlogn),空间(k)
  • 注意整型溢出问题
技术分享图片
 1 class Solution {
 2 public:
 3     bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
 4         if(t < 0)
 5             return false;
 6 
 7         set<long long> record;
 8         for(int i = 0 ; i < nums.size() ; i ++){
 9 
10             if(record.lower_bound((long long)nums[i] - (long long)t) != record.end() &&
11                 *record.lower_bound((long long)nums[i] - (long long)t ) <= (long long)nums[i] + (long long)t)
12                 return true;
13 
14             record.insert(nums[i]);
15 
16             if(record.size() == k + 1)
17                 record.erase( nums[i-k] );
18         }
19 
20         return false;
21     }
22 };
View Code

 

[刷题] LeetCode 220 Contains Duplicate III

原文:https://www.cnblogs.com/cxc1357/p/12624870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!