博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Contains Duplicate III
阅读量:6543 次
发布时间:2019-06-24

本文共 1634 字,大约阅读时间需要 5 分钟。

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.

一开始理解错题目了,还以为是要求所有的数对都必须符合要求,一直超时。其实题目是问是不是存在一个符合条件的数对,所以就容易多了,维护一个大小为 k 的二叉搜索树,来一个新的元素时,在BST上二分搜索有没有符合条件的数对,动态更新这个BST。因为BST的大小为 k 或不超过 k,所以这里面的数下标的差值一定是符合条件的。还有几点要注意的就是nums[i]与nums[j]的差值的是绝对值,所以要分别找lower_bound跟upper_bound,数据比较坑爹,为了防止溢出,容器用long long类型的。

1 class Solution { 2 public: 3     bool containsNearbyAlmostDuplicate(vector
& nums, int k, int t) { 4 multiset
bst; 5 for (int i = 0; i < nums.size(); ++i) { 6 if (bst.size() == k + 1) bst.erase(bst.find(nums[i - k - 1])); 7 auto lb = bst.lower_bound(nums[i]); 8 if (lb != bst.end() && abs(*lb - nums[i]) <= t) return true; 9 auto ub = bst.upper_bound(nums[i]);10 if (ub != bst.begin() && abs(*(--ub) - nums[i]) <= t) return true;11 bst.insert(nums[i]);12 }13 return false;14 }15 };

 

不用比较两次,直接找nums[i] - t的lower_bound, 这个值就是与nums[i]差值最近的值。

1 class Solution { 2 public: 3     bool containsNearbyAlmostDuplicate(vector
& nums, int k, int t) { 4 multiset
bst; 5 for (int i = 0; i < nums.size(); ++i) { 6 if (bst.size() == k + 1) bst.erase(bst.find(nums[i - k - 1])); 7 auto lb = bst.lower_bound(nums[i] - t); 8 if (lb != bst.end() && *lb - nums[i] <= t) return true; 9 bst.insert(nums[i]);10 }11 return false;12 }13 };

 

转载地址:http://gvodo.baihongyu.com/

你可能感兴趣的文章
SQL Server 开发指南
查看>>
3.Magicodes.NET框架之路——预览(一)
查看>>
Android Service 服务(一)—— Service
查看>>
Rabbitmq 加入用户訪控制台(guest无法登陆控制台问题)
查看>>
Z路径覆盖
查看>>
Android -- Drawable && Bitmap
查看>>
石头剪刀布手套:不止是寂寞宅的消遣
查看>>
上海自贸区是什么?在哪里?面积多大?设立意义
查看>>
php类库安装xml
查看>>
IOS设计模式之三:MVC模式
查看>>
R语言学习笔记:绘制地图
查看>>
【MyBean调试笔记】关于单元的释放顺序
查看>>
thinkphp 自动跟新时间
查看>>
iOS学习之 plist文件的读写
查看>>
25款顶级的jQuery表格插件
查看>>
High-current supply uses standard three-terminal regulator
查看>>
IT项目技术建议书核心内容
查看>>
Sql Server系列:多表连接查询
查看>>
SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识...
查看>>
用c++封装linux系统调用
查看>>