思路:滑动窗口(长度为k+1)看这个窗口里的是否有两个元素的值相同。加查找表。

//时间:O(n)
//空间:O(k)
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
unordered_set<int> record; //查找表
for(int i=; i<nums.size();i++)
{
if(record.find(nums[i])!= record.end() )
return true;
record.insert(nums[i]);
//保持record中最多有k个元素,当右边有一个新的元素加入时,窗口才会变成k+1
if(record.size()==k+)
record.erase(nums[i-k]);
}
return false;
}
};

注意:是数组中有重复的元素返回true,没有返回false。

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_map<int, int> mp;
for(int a: nums){
if(mp.find(a)==mp.end()){
//没找到重复元素
mp[a] +=;
}
else
return true;
}
return false;
}
};

用set运行的更快。

class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> record;
for(int i=;i<nums.size();i++){
if(record.find(nums[i])!=record.end())
return true;
record.insert(nums[i]);
}
return false;
}
};

函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置.

注意:如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!

//时间:O(nlogn)
//空间:O(k)

对于数组中有2147483647这个值时,当nums[i]+t 容易造成整型溢出。注意整型溢出,改变类型为 long long 。

class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
//long long 64位整型
set<long long > record; //因为调用lower_bound 需要有顺序性,所以使用set
for(int i=;i<nums.size();i++){
//查找大于或等于nums[i]-t的第一个元素的位置
if(record.lower_bound( (long long)nums[i]-(long long)t) != record.end() &&
*record.lower_bound( (long long)nums[i]-(long long)t)<= (long long)nums[i]+(long long)t)
return true;
record.insert(nums[i]); if(record.size() == k+)
record.erase(nums[i-k]); } return false;
}
};

最新文章

  1. Azure PowerShell (1) PowerShell入门
  2. wpa_supplicant移植
  3. BZOJ 2173 整数的lqp拆分
  4. jquery加入收藏代码
  5. [SQL Server 系] -- 模糊查询
  6. Ubuntu 安装mod_python配置Apache2
  7. rac_进行grid自检时提示运行runfixup.sh脚本一例
  8. SQLite数据库查看工具(免费)
  9. 关于code reivew
  10. 学好php可以做的事情真多!
  11. Ajax模拟Form表单提交,含多种数据上传
  12. python-shutil学习
  13. [NOI2015]软件包管理器-树链剖分
  14. Oracle 网络配置与管理
  15. webpack使用七
  16. Pandas时间序列
  17. 2016NOI冬令营day4
  18. 内核事件KEVENT(同步)
  19. URL的井号
  20. java继承-final关键词用法

热门文章

  1. 银行家算法之JavaScript实现
  2. 类型或命名空间名称“Interop”在类或命名空间“Microsoft.Office”中不存在(是否缺少程序集引用?)
  3. C/C++代码覆盖率工具gcov、lcov
  4. 19、SOAP安装,运用与比对结果解释
  5. tensor 维度 问题。
  6. ios7适配--navgationbar遮住下面view的处理
  7. 编写高质量代码改善C#程序的157个建议——建议23:避免将List&lt;T&gt;作为自定义集合类的基类
  8. wpf控件开发基础
  9. jQuery高级
  10. Tomcat调优总结