查找表 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
2024-09-26 20:09:20
思路:滑动窗口(长度为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;
}
};
最新文章
- Azure PowerShell (1) PowerShell入门
- wpa_supplicant移植
- BZOJ 2173 整数的lqp拆分
- jquery加入收藏代码
- [SQL Server 系] -- 模糊查询
- Ubuntu 安装mod_python配置Apache2
- rac_进行grid自检时提示运行runfixup.sh脚本一例
- SQLite数据库查看工具(免费)
- 关于code reivew
- 学好php可以做的事情真多!
- Ajax模拟Form表单提交,含多种数据上传
- python-shutil学习
- [NOI2015]软件包管理器-树链剖分
- Oracle 网络配置与管理
- webpack使用七
- Pandas时间序列
- 2016NOI冬令营day4
- 内核事件KEVENT(同步)
- URL的井号
- java继承-final关键词用法
热门文章
- 银行家算法之JavaScript实现
- 类型或命名空间名称“Interop”在类或命名空间“Microsoft.Office”中不存在(是否缺少程序集引用?)
- C/C++代码覆盖率工具gcov、lcov
- 19、SOAP安装,运用与比对结果解释
- tensor 维度 问题。
- ios7适配--navgationbar遮住下面view的处理
- 编写高质量代码改善C#程序的157个建议——建议23:避免将List<;T>;作为自定义集合类的基类
- wpf控件开发基础
- jQuery高级
- Tomcat调优总结