LeetCode思路总结(不定时更新!!!!!!)
1.解题技巧
1.1提升效率
(1)我们在做题过程中可以通过使用更加高效的数据结构,来满足不同问题的需求。例如为了提高查找效率,我们可以使用哈希表减少查找的时间复杂度,例如在LeetCode第一题中的求解两数之和,我们可以计算出需要的第二个数,如果存在则返回,不存在就把需要的第二个数放在哈希表中。
(2)在做c++问题时发现了耗时最少的答案,在提交代码头添加了一段程序,如下:
static const auto __ = []()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
return nullptr;
}();
自己尝试了下发现可以从28ms(78%)提升到20ms(99.55%),真的是个神奇的东西,后来晚上找了下资料,以我的理解就是C++为了兼容C的输入输出,把数据存入内存在读取出来导致效率降低,这段代码解除了绑定,提高了效率。
(3)在判断数组中数值相等或者其他对数值进行判断的操作时,可以尝试使用^(异或运算符),&(与运算符),~(翻转运算符),会更加方便,例如LeetCode第136题只出现一次的数字。
2.实际函数操作 c++ 2.1数组
c++中的vector容器可以理解为一种可以改变大小的数组,下面给出常用的操作。
1. #include //需引用的头文件
2. vector vec;
//初始化一个空vector
3. vector vec(10);
//初始化成长度为10,元素为0的vector
4. vector vec(10,1);
//初始化成长度为10,元素为1的vector
5. vector a(vec);
//通过同类型vector赋值
6. vec.back();
//返回vec的最后一个元素
7. vec.front();
//返回vec的第一个元素
8. vec.clear();
//清空vec中的元素
9. vec.empty();
//判断vec是否为空,空则返回ture,不空则返回false
10. vec.size();
//返回vec中元素的个数
11. vec.push_back(5);
//在vec的最后一个向量后插入一个元素,其值为5
12. vec.insert();
//插入函数,还有很多复杂的功能
13. vec.erase();
//删除函数,还有很多复杂的功能
14. unique(vec.begin(),vec.end());
//去除重函数,但没有删除,只是把重复元素移到后面。**注意!!!是相邻的重复元素**,而且后面数的是原来的数并不是剩余的数
15. reverse(vec.begin(),vec.end());
// 翻转函数
16. for (auto& num: nums)// 可以简洁的遍历数组
17. sort(vec.begin(), vec.end());
//对vector进行排序
18. accumulate(nums.begin(),nums.end(),10);
//对vector进行求和,并再加上10
19. INT_MAX,INT_MIN;
// 最大/最小整数
20. vector> vec(10,vector (10,1));
//二维数组初始化
2.2哈希表
c++中我经常使用unordered_map,unordered_map和map的区别,以我的理解map中对键值进行了排序,而unordered_map中是无序的,相对来说unordered_map的效率会更高些。
1. #include //需引用的头文件
2. unordered_map m;
//初始化一个空unordered_map
3. m[1] = 1;
//赋值key=1,值为1
4. m.find(key) == m.end();
//find实现查询是否有键key存在,返回的是对应迭代器,所以需要加上后面来判断是否存在
5. m.size();
//返回有效元素个数
2.3字符串
1. transform(s.begin(), s.end(), s.begin(), ::tolower);
//字符串转化为小写
2. isalnum();
//判断是否为字母或者数字
3. tolower(*left)//单个字符转换小写
4. s1.compare(s2);
//比较字符串
5. s.substr(0,4);
//截取字符串从位置0开始,往后数4个
6. s1.find_first_of(s2);
//查找s2任意一个字符,首次在s1出现的位置
7. s1+s2 或 s1.append(s2);
//字符串拼接
2.4栈和队列
1. stack s;
//定义一个栈
2. s.pop();
// 出栈,注意不返回元素
3. s.top();
//访问栈顶元素
4. s.size()//栈大小
2.5set集合
【算法库|LeetCode 思路总结】set和map区别在于map存储的是一对数据,有键值有元素。set只存储元素。
Python
1. set()//可以转为无序,不重复的集合类型,可进行交,并等集合操作
2. Counter()//实现计数操作,即每个元素出现几次
推荐阅读
- Application|linux应用编程笔记(5)系统调用文件编程方法实现文件复制
- 数据结构与算法|【算法】力扣第 266场周赛
- leetcode|今天开始记录自己的力扣之路
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 【LeetCode】28.实现strstr() (KMP超详细讲解,sunday解法等五种方法,java实现)
- LeetCode-35-搜索插入位置-C语言