LeetCode 思路总结

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.实际函数操作

2.1数组

C++

c++中的vector容器可以理解为一种可以改变大小的数组,下面给出常用的操作。

 1. #include <vector> //需引用的头文件
 2. vector<int> vec; //初始化一个空vector
 3. vector<int> vec(10); //初始化成长度为10,元素为0的vector
 4. vector<int> vec(101); //初始化成长度为10,元素为1的vector
 5. vector<int> 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

Python

 1. set()//可以转为无序,不重复的集合类型,可进行交,并等集合操作

2.2哈希表

C++

c++中我经常使用unordered_map,unordered_map和map的区别,以我的理解map中对键值进行了排序,而unordered_map中是无序的,相对来说unordered_map的效率会更高些。

 1. #include <unordered_map>//需引用的头文件
 2. unordered_map<int, int> m;//初始化一个空unordered_map
 3. m[1] = 1;//赋值key=1,值为1
 4. m.find(key) == map.end();//find实现查询是否有键key存在,返回的是对应迭代器,所以需要加上后面来判断是否存在
 5. m.size(); //返回有效元素个数 

猜你喜欢

转载自blog.csdn.net/m0_37625947/article/details/80337645
今日推荐