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

滑动窗口 - leetcode

时间:2017-01-19 12:43:30      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:contain   阈值   return   最新   下标   size   ret   检验   两个指针   

220. Contains Duplicate III


//这里需要两个指针i和j,刚开始i和j都指向0,然后i开始向右走遍历数组,如果i和j之差大于k,且m中有nums[j],则删除并j加一。这样保证了m中所有的数的下标之差都不大于k,然后我们用map数据结构的lower_bound()函数来找一个特定范围,就是大于或等于nums[i] - t的地方,所有小于这个阈值的数和nums[i]的差的绝对值会大于t (可自行带数检验)。然后检测后面的所有的数字,如果数的差的绝对值小于等于t,则返回true。最后遍历完整个数组返回false。

multiset<int> window; // 维护一个大小为k的窗口
for (int i = 0; i < nums.size(); ++i) {
if (i > k) window.erase(nums[i - k - 1]); // 保持window内只有最新k个元素,间接保证窗口内各元素下标不超过k
auto pos = window.lower_bound(nums[i] - t);
if (pos != window.end() && *pos - nums[i] <= t) return true;
window.insert(nums[i]);
}
return false;

滑动窗口 - leetcode

标签:contain   阈值   return   最新   下标   size   ret   检验   两个指针   

原文地址:http://www.cnblogs.com/93scarlett/p/6305848.html

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