leetcode中C++常用知识点:
①把数字变成字符串to_string(数字);
②不能直接将一个字符,变成字符串。办法只有变为字符数粗,然后直接复制。例:S1 = a;(a是字符数组,S1是字符串)
③不能直接给字符串的某个位置赋值,只能是字符串链接,例如S += to_string(数字);
④排序函数前面加个static,因为里面对数组进行操作,而数组是主函数的局部变量。所以加个static。
⑤ s.erase(0,s.find_first_not_of(" “));//删除字符串首空格
s.erase(s.find_last_not_of(” ") + 1);//删除字符串位空格
⑥while( (index = s.find(’ ',index)) != string::npos)
{
s.erase(index,1);
}
⑦
static bool cmp(string a, string b)
{
return a + b > b + a;//目的让选出ab大,还是ba大,假如ab大,那么a排前面。(用于两个字符串连接)
}
⑧如果只给出一个二维数组,怎么判断几行几列??
m = board.size();
n = board[i].size();
⑨vector<vector> a;二维的vector数组,注意vector是一个向量,不是单纯的一个一个格子式的数组。
a.push_back({nums[i], nums[j], shu});//向vector数组添加数注意是push_back和{}
⑩ sort (nums.begin(), nums.end());//vector数组排序,.end()得到的是最后一个元素加一的位置
11关于vector,list,map等的简单描述
原文链接:https://blog.youkuaiyun.com/qq_36570733/article/details/104134881
Vector:顺序表
优点:和数组类似开辟一段连续的空间,并且支持随机访问,所以它的查找效率高其时间复杂度O(1)。
缺点:由于开辟一段连续的空间,所以插入删除会需要对数据进行移动比较麻烦,时间复杂度O(n),另外当空间不足时还需要进行扩容。具体扩容方法是:寻找一块大小为原向量空间2倍的连续空白内存,将原向量内容拷贝过去,并增加新的元素,最后删除原向量空间的数据。
List:链表
优点:底层实现是循环双链表,当对大量数据进行插入删除时,其时间复杂度O(1)
缺点:底层没有连续的空间,只能通过指针来访问,所以查找数据需要遍历其时间复杂度O(n),没有提供[]操作符的重载。
(哈希集合,只存储键值,即key本身)
vector<list<int>> data;这个实现了嵌套,首先是一个vector数组,对于每一个位置又形成了一个链表。用来实现哈希判重(链地址法)
(哈希映射,存储key值和value两个),用到的声明
vector<list<pair<int, int>>> data;,注意这个pair是vector带有的,单纯的就是vector<pair<int, int>>,调用的时候就是vector[i].first(第一个值),vector[i].second(第二个值)。与map的区别就是,map根据键值自动排序,不允许有重复的键值,而vector不是自动排序的,可以有相同的键值。
而把key值和value值压入进去要用的make_pair例:data[i].push_back(make_pair(key, value))[详细请见这篇文章](https://blog.youkuaiyun.com/weixin_44915226/article/details/107362610)