LeetCode 220. Contains Duplicate III *****理解条件,查找表
来源:互联网 发布:js 仿京东楼层特效 编辑:程序博客网 时间:2024/06/04 19:21
- 题目
- 题意
- 注意
- 思路
- 代码
- 结果
- 题目
题目
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i] and nums[j] is at most t and the absolute difference between i and j is at most k.
题意
给定一个整型数组,查找是否存在两个元素nums[i],nums[j]使得,|nums[i]-nums[j]|<= t,并且j-i<= k
注意
- 相对于Contains Duplicate II 增加了条件|nums[i]-nums[j]|<= t。
- nums[i]-t <= nums[j] <= nums[i]+t
- 当我们拆开这个绝对值符合当心整型越界
思路
由于我们的窗口范围仍然是j-i<= k,我们可以复用Contains Duplicate II
ceil(v-t) —— >= v-t—————-ceil(v-t) <= v+t即可
floor(v+t) ——- <=v+t————–v-t <= floor(v+t)即可
STL中为我们提供了ceil的实现lower_bound
使用lower_bound,需要利用红黑树实现的map,因为这样的键是有序的
代码
class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { set<long long> record; for (int r = 0; r < nums.size(); r++) { //负数 //abs(i-j) <= t i-t << j <<i+t if(record.lower_bound((long long)nums[r]-t) != record.end()&&*record.lower_bound((long long)nums[r]-t) <= ((long long )nums[r]+t)) return true; //record[nums[r]]++; record.insert(nums[r]); //set集合不可像map那样插入元素 //保持record中最多有k个元素 [0,K]区间中有k+1个元素 if (record.size() == k + 1) record.erase(nums[r - k]); } return false; }};
map迭代器的使用注意,解引用时需要括号,因为.的优先级高于*
结果
阅读全文
0 0
- LeetCode 220. Contains Duplicate III *****理解条件,查找表
- [leetcode ]220.Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- Leetcode-220. Contains Duplicate III
- [LeetCode]220. Contains Duplicate III
- leetcode.220. Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- 【LeetCode】220. Contains Duplicate III
- LeetCode 220. Contains Duplicate III
- Leetcode 220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- [leetcode]220. Contains Duplicate III
- #leetcode#220. Contains Duplicate III
- [leetcode]220. Contains Duplicate III
- leetcode 220. Contains Duplicate III
- 220. Contains Duplicate III [leetcode]
- leetcode 220. Contains Duplicate III
- centos7如何添加开机启动服务/脚本
- STM32-新建工程
- 安卓调用系统日历控件
- Spring统一异常处理
- log4j与log4j2的配合使用、slf4j
- LeetCode 220. Contains Duplicate III *****理解条件,查找表
- 隐马尔科夫模型、三个基本问题、三个训练算法
- 如何向销售(业余人士)解释TINA系统
- Java线程基础
- Tomcat服务器的问题
- 谈谈构建高性能WEB之HTTP首部优化
- JavaScript错误处理与调试总结
- 1119. Pre- and Post-order Traversals (30)
- SOA面向服务的架构概念梳理