leetcode刷题之路的一些记录
lower_bound使用
在 非递减序列中 找到 第一个大于或者等于 某个元素的位置,如果找得到,返回相应的迭代器,否则,返回范围中的尾迭代器。
使用示例
https://leetcode.cn/problems/longest-increasing-subsequence/
int pos = lower_bound(d.begin(), d.end(), nums[i]) - d.begin(); |
自定义优先队列
https://leetcode.cn/submissions/detail/326788137/
自定义sort方法
sort(envelopes.begin(), envelopes.end(), [](const auto& e1, const auto& e2) { |
LeetCode 第 1 号问题:两数之和(暴力解、哈希表)
c++ vector
vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件:
#include<vector>;
vector 的初始化:可以有五种方式,举例说明如下:
(1) vector
a(10); //定义了10个整型元素的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),但没有给出初值,其值是不确定的。
(2)vectora(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
(3)vectora(b); //用b向量来创建a向量,整体复制性赋值
(4)vectora(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
(5)int b[7]={1,2,3,4,5,9,8};
vectora(b,b+7); //从数组中获得初值
(6)vectorvec1{ 1, 2, 3, 4, 5, 6 }; //vec1内容1,2,3,4,5,6
c++ for循环
- 可以在初始化部分中声明变量。如for (int i = 0; ;)
返回vector类型
可直接return {i,j}; 或 return {,};
capacity,如果不重新分配内存,当前已经分配的可以容纳的元素的个数.
max_size最大的可能的元素个数.
size是当前元素个数
sizeof是vector本身的大小(sizeof(vector))
int len=sizeof(arr)/size(arr[0])
引用作函数参数
- vector
& nums 引用
哈希表
unordered_map: unordered_map内部实现了一个哈希表,因此其元素的排列顺序是杂乱的,无序的
最初的 C++ 标准库中没有类似 hash_map 的实现,但不同实现者自己提供了非标准的 hash_map。 因为这些实现不是遵循标准编写的,所以它们在功能和性能保证方面都有细微差别。从 C++ 11 开始,hash_map 实现已被添加到标准库中。但为了防止与已开发的代码存在冲突,决定使用替代名称 unordered_map。这个名字其实更具描述性,因为它暗示了该类元素的无序性。
C++ 11标准中加入了unordered系列的容器。unordered_map记录元素的hash值,根据hash值判断元素是否相同。map相当于java中的TreeMap,unordered_map相当于HashMap。无论从查找、插入上来说,unordered_map的效率都优于hash_map,更优于map;而空间复杂度方面,hash_map最低,unordered_map次之,map最大。
unordered_map与map的对比:
存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储(用红黑树实现),进行中序遍历会得到有序遍历。所以使用时map的key需要定义operator<。而unordered_map需要定义hash_value函数并且重载operator==。但是很多系统内置的数据类型都自带这些。
总结:结构体用map重载<运算符,结构体用unordered_map重载==运算符。
unordered_map与hash_map对比:
unordered_map原来属于boost分支和std::tr1中,而hash_map属于非标准容器。
unordered_map感觉速度和hash_map差不多,但是支持string做key,也可以使用复杂的对象作为key。
unordered_map编译时gxx需要添加编译选项:—std=c++11
unordered_map模板:
1 template < class Key, // unordered_map::key_type |
迭代器:
unordered_map的迭代器是一个指针,指向这个元素,通过迭代器来取得它的值。
1 unordered_map<Key,T>::iterator it; |
它的键值分别是迭代器的first和second属性。
1 it->first; // same as (*it).first (the key value) |
成员函数:
=================迭代器=========================
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾位置的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
=================Capacity================
size 返回有效元素个数
max_size 返回 unordered_map 支持的最大元素个数
empty 判断是否为空
=================元素访问=================
operator[] 访问元素
at 访问元素
=================元素修改=================
insert 插入元素
erase 删除元素
swap 交换内容
clear 清空内容
emplace 构造及插入一个元素
emplace_hint 按提示构造及插入一个元素
================操作=========================
find 通过给定主键查找元素,没找到:返回unordered_map::end
count 返回匹配给定主键的元素的个数
equal_range 返回值匹配给定搜索值的元素组成的范围
================Buckets======================
bucket_count 返回槽(Bucket)数
max_bucket_count 返回最大槽数
bucket_size 返回槽大小
bucket 返回元素所在槽的序号
load_factor 返回载入因子,即一个元素槽(Bucket)的最大元素数
max_load_factor 返回或设置最大载入因子
rehash 设置槽数
reserve 请求改变容器容量
https://www.cnblogs.com/langyao/p/8823092.html
LeetCode 第 15 号问题:三数之和(排序+双指针)