问题描述:判断数组中是否存在<ai aj> abs(ai - aj)<=t  && abs(i - j) <=k;

问题分析:需要一个数据结构来维护满足条件k。单纯暴力,会超时。假设当前元素num[i]我只需要判断 i- k -1 到 i之间的元素的关系就可以了。假设当前元素是num[i], 另一个元素a(multiset中的),他们满足

  | a - num[i]|<=t       可得到     num[i] - t  <= a <=  num[i] + t。

  所以我需要尽快找到 num[i] - t 的下界(lb)(第一个大于等于 num[i] - t的值)然后在判断 |lb - num[i]| <= t是否满足 。

问题解决:这里使用multiset来维护最多k个元素。区别与set , multiset可以存储多个相同的元素。然后按照升序关系排列。

PS:C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。http://www.cnblogs.com/BeyondAnyTime/archive/2012/08/13/2636375.html

PSS: 关于 lower_bound() 和 upper_bound() ,看这里http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html

最后代码:

class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t)
{
if(nums.size() == || k == ) return false;
multiset<int>muset;//可重复元素的set
for(int i = ; i < nums.size(); i ++){
if(muset.size() >= k + )
muset.erase(nums[i - k - ]);
auto lb = muset.lower_bound(nums[i] - t);//第一个大于等num[i]的元素位置
if(lb != muset.end() && abs(*lb - nums[i]) <= t) return true;
muset.insert(nums[i]);
}
return false;
}
};

就这样了, 加油。

最新文章

  1. .Net实现拉勾网爬虫
  2. Third glance in Go
  3. linux下 ^M
  4. docker-image container 基本操作 -常用命令
  5. json对象与json字符串对象格式
  6. jsp中frameset frame不显示页面
  7. Eclipse目录
  8. Core Python Notes
  9. iOS集成微信支付
  10. 通过 PHP 连接China Azure Blob 存储
  11. Unity导航 (寻路系统Nav Mesh Agent)
  12. Python的re模块中search与match的区别
  13. Solve Error: &quot;errcode&quot;: 40016, &quot;errmsg&quot;: &quot;invalid button size hint&quot;
  14. Linux系统(本例以Ubuntu18.04为例)安装GCC编译器
  15. atof()函数 atol()
  16. ES系列三、基本知识准备
  17. Spring事务传播属性介绍(三).Nested
  18. Pandas DataFrame 数据选取和过滤
  19. android 图片解码显示流程
  20. php调用C#写的dll包

热门文章

  1. nagios添加check_logfiles监控注意事项
  2. codevs1009 产生数
  3. 强连通图 HDU - 1269
  4. MYSQL中插入数据以及修改数据的部分方法
  5. Maven安装好后包下载的测试命令和配置变量的查看命令:mvn help:system
  6. SiteMesh2-decorators.xml文件
  7. leetcode第一刷_Spiral Matrix
  8. Oracle 用户管理(二)
  9. tiny4412 裸机程序 八、重定位到DRAM及LCD实验【转】
  10. ubuntu下使用crontab定时器