220. Contains Duplicate III
来源:互联网 发布:sql server可视化界面 编辑:程序博客网 时间:2024/06/10 15:12
class Solution { // 木桶原理public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { if ( k < 1 || t < 0 ) return false; const long long startPos = 0x80000000; // 数据重映射 unordered_map<long long, int> _map; for (int i = 0; i < nums.size(); ++i){ long long newNum = (long long)nums[i] - startPos; // nums[i]前加long long,避免溢出 auto iter = _map.find(newNum / (t + 1)); if (iter != _map.end() && i - iter->second <= k) return true; iter = _map.find(newNum / (t + 1) + 1); if (iter != _map.end() && i - iter->second <= k){ if ( abs((long long)nums[iter->second] - nums[i]) <= (long long)t) return true; } iter = _map.find(newNum / (t + 1) - 1); if (iter != _map.end() && i - iter->second <= k){ if ( abs ((long long)nums[i] - nums[iter->second]) <= (long long)t) return true; } _map[newNum / (t + 1)] = i; // 将一组相邻的数值映射到一个数值, 重点 //这样写错误,若newNum/(t+1)已经存在,则无法更新i值 // _map.insert(make_pair(newNum / (t + 1), i)); } return false; }};
注意点:
1. 注意溢出问题
0 0
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- 220. Contains Duplicate III
- leetcode29 Divide Two Integers
- [LeetCode] 144. Binary Tree Preorder Traversal
- C#调用webbrowser,阻止弹出新HTML页面
- Flume安装及简单部署
- Software Architecture Patterns
- 220. Contains Duplicate III
- 不想浪费时间写重复代码(二)
- 访问Google只需一步,超级简单
- windows程序设计笔记
- iOS Runtime应用实例(一)类别添加属性
- SSM项目之---淘淘商城(第一天)
- 十个值得一试的开源深度学习框架
- javascript时间戳和日期字符串相互转换
- java 实现生成文件 然后把文件放到共享文件夹下面 smb