查找表 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)


思路:滑动窗口(长度为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;
}
};
查找表 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)的更多相关文章
- leetcode 217. Contains Duplicate 287. Find the Duplicate Number 442. Find All Duplicates in an Array 448. Find All Numbers Disappeared in an Array
后面3个题都是限制在1-n的,所有可以不先排序,可以利用巧方法做.最后两个题几乎一模一样. 217. Contains Duplicate class Solution { public: bool ...
- LeetCode Javascript实现 169. Majority Element 217. Contains Duplicate(两个对象比较是否相等时,如果都指向同一个对象,a==b才是true)350. Intersection of Two Arrays II
169. Majority Element /** * @param {number[]} nums * @return {number} */ var majorityElement = funct ...
- 查找表,Two Sum,15. 3Sum,18. 4Sum,16 3Sum Closest,149 Max points on line
Two Sum: 解法一:排序后使用双索引对撞:O(nlogn)+O(n) = O(nlogn) , 但是返回的是排序前的指针. 解法二:查找表.将所有元素放入查找表, 之后对于每一个元素a,查找 t ...
- LN : leetcode 217 Contains Duplicate
lc 217 Contains Duplicate 217 Contains Duplicate Given an array of integers, find if the array conta ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- JAVASE02-Unit05: 集合操作 —— 查找表
Unit05: 集合操作 -- 查找表 使用该类测试自定义元素的集合排序 package day05; /** * 使用该类测试自定义元素的集合排序 * @author adminitartor * ...
- OpenCV从入门到放弃系列之——如何扫描图像、利用查找表和计时
目的 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 颜色空间缩减.具体做法就是:将现有颜色空间值除以某个输入 ...
- Lua查找表元素过程(元表、__index方法是如何工作的)
近日开始研究Lua,在元表的使用上照猫画虎地搞了两下,实现了“面向对象”,但究其本质却略有不解,后咨询牛哥得解,特此记录. Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Val ...
- Quarter square 查找表乘法器,手动建立rom
建立一个C的范围为0~255,内容是(C)2/4的查表 占用256个存储空间,但可以计算出+-127的两个数之积.传统算法需要至少127×127个存储空间. 查找表模块的建立: module lut_ ...
随机推荐
- 3-java中String值为空字符串与null的判断方法
java中String值为空字符串与null的判断方法 2018年01月21日 14:53:45 阅读数:1189 Java空字符串与null的区别 1.类型 null表示的是一个对象的值,而不是一个 ...
- 3.Dynamic Layout 动态布局。在槽中处理布局
在应用程序中,一个界面的布局基本都是固定的. 在这个实例中,我们把管理布局的代码放在槽中.这样点击一次按钮,触发槽.布局改变一次.这样就成为一个动态布局. (一) 水平和竖直布局改变 横向: 纵向: ...
- 黑盒测试实践-任务进度-Day02
使用工具 selenium 小组成员 华同学.郭同学.穆同学.沈同学.覃同学.刘同学 任务进度 在经过了昨天的基本任务分配之后,今天大家就开始了各自的内容,以下是大家任务的进度情况汇总. 华同学(任务 ...
- CentOS7下源码包方式安装Erlang
1.官网上下载源码包:OTP 19.1 Source File 2.把源码放在source目录中 , 解压 :tar -zxvf otp_src_19.1.tar.gz [或者 直接下载 rpm包 e ...
- Java 设计模式 和七大设计原则
创建型模式 抽象工厂模式(Abstract factory pattern): 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要指定具体类. 生成器模式(Builder pattern): 使 ...
- 请教一个Jquery ligerui 框架的小问题
关闭子窗体时,要刷新父窗体,百度了很多像使用“window.opener.location.reload();”都不行,和easyui框架是有区别的 在子窗体里写Response.Write(&quo ...
- [算法基础]Big O Notation时间复杂度计算方法
首先一点就是无视任何常量 从最简单的开始 statement; 这段时间复杂度为常数1,所以O(1). 然后 ; i < N; i++ ) statement; 这一段是线性的,则时间复杂度为N ...
- channel_id以及type_id的内容
- MongoDB整理笔记の管理Replica Sets
一.读写分离 从库能进行查询,这样可以分担主库的大量的查询请求. 1.先向主库中插入一条测试数据 [root@localhost bin]# ./mongo --port 28010 MongoD ...
- HTML5+CSS3从入门到精通随书光盘 ISO 镜像视频教程
HTML5+CSS3从入门到精通(清华社“视频大讲堂”大系)通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于权威指南.高级程序设计.开发指南同类图书 ...