三数之和
题目如下,是力扣热题100的第15题:力扣https://leetcode.cn/problems/3sum/?envType=featured-list&envId=2cktkvj首先学习到C++的sort方法:
- 默认: 两个参数
first
,last
,将[first, last)
区间内元素升序排列。 - sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使用
stable_sort
函数 - 由于在排序过程中涉及到元素交换等操作,所以sort函数仅支持可随机访问的容器,如数组, string、vector、deque等。
- 时间复杂度:O(N*log2(N))
sort(nums.begin(), nums.end());
begin和end
begin:返回指向容器第一个元素的迭代器
end:返回指向容器最后一个元素下一个位置的迭代器
还有一个困惑代码:
vector<vector<int>> ans;
ans.push_back({nums[first], nums[second], nums[third]});
解释如下:
这里大括号是C++11功能,可以使用大括号(而不是圆括号)括起来的列表调用构造函数
其实就是:
vector<vector<int>> ans;
ans.push_back(vector<int>{nums[first], nums[second], nums[third]});
电话号码的字母组合
题目如下,是力扣热题100的第15题:
map构造方法:
map<string,int> my_map;
插入新数据方法:
map<int,string> my_map; my_map.insert(pair<int,string>(1,"first"));
注:
- map是红黑树实现的,数据有序;unordered_map是哈希表实现
- 初始化问题,如下代码:
string s; vector<int> list1;
初始化的字符串与vector皆为空
- string也有push_back(),pop_back()方法,push_back只能增加字符char
- substr(int pos=0, int n)方法:pos是开始子串截取位置,n表示取多少个字符,不填表示截取到末尾
合并 K 个升序链表
题目如下,是力扣热题100的第23题:
力扣https://leetcode.cn/problems/merge-k-sorted-lists/?envType=featured-list&envId=2cktkvj
PriorityQueue:
template <typename T,
typename Container=std::vector<T>,
typename Compare=std::less<T>> class priority_queue
默认less,即“大根堆”;
结构体中this为指向本结构体的指针
自定义比较的操作如下:
下一个排列
题目如下,是力扣热题100的第31题:
力扣https://leetcode.cn/problems/next-permutation/
关于reverse方法
1.reverse(str.begin(),str.end()) 反转字符串
2.reverse(vector.begin(),vector.end()) 反转向量
3.reverse(a,a+strlen(a)) 反转数组
数组中直接swap()交换值