banner
Lowerce

Lowerce

github
twitter

使用C++写leetcode算法的一些总结

本文内容依据我在使用 C++ 完成各类 leetcode 问题时得到的有效信息和经验写成。

P.S. 可能更强调在 c++ 的使用上而非各类逆天的算法解决方案上。

map#

总的来说 map 是一个非常好用的东西,很多可以用 set 的问题我依然使用 map 来解决,感觉很舒服。

创建#

创建的时候需要指定好类型 map or unordered_map < type , type > variable_name,创建出来是空的。拿unordered_map<string,int> maps来举例。

插入删除#

对于计数型应用 (反正做题比较多),即后一个 type 是 int 的情况,用起来很简单,直接maps["hello"]++,这样就在创建了对应 key 值并 + 1。这里使用上值得注意,当 key 对应的 value 值减到 0 时,并不意味着这个 key 就消失了,需要maps.erase("hello")才能真正抹掉对应的 key 值。

其它的应用就需要使用maps.insert(pair<string,string>("hello","world"))来插入了。

查找#

作为一个哈希表,查找是其得到使用的根本原因。

看一个 key 是不是在表里, if(maps.find("hello")!=maps.end()) ,如果返回 true,则说明在表里。这里的返回值是一个迭代器,迭代器这么用,maps.find("hello")->first ,这就是 key 的值(也就是 "hello"),maps.find("hello")->second ,这就是 "hello" 对应的 value 值。

想遍历 map,也得靠迭代器,先造个迭代器,unordered_map<string,int>::iterator itr,然后 for 循环的用法就跟一般的遍历差不多了。for(itr=maps.begin();itr!=maps.end();itr++)这样就能遍历啦。

string#

string 的各种操作用法千奇百怪,很多感觉几乎等效。

assign#

大概用法是 s1.assign (s,index,num) ,这样可以把 s 字符串从 index 索引值开始往后的 num 个字符赋给 s1 字符串。

基本跟 substr 是一样的。

substr#

s1=s.substr(index,num) ,这个操作跟使用 assign 是等效的。

for#

for 循环一些自动遍历的 trick 之前没用过。

比如for(auto i:nums)或者for(auto &i:maps),后者取值用t.firstt.second即可。也可以for(auto &[key,vaule]:maps)就能直接取到 key 和 value 啦。

reverse#

这个好像可以用来反转很多 C++ 支持的数据结构,一般是两个输入参量,用法大概是这样。reverse (开始位置,开始位置 + 需要翻转的数量),从这个角度看,它的输入参量是左闭右开的区间,例如reverse(string.begin(),string.end())...

反正第一次用起来有点晕,极有可能 c++ 很多的标准函数采用类似的输入形式,需要注意。

resize#

反正对于字符串而言挺好使,直接 resize (更新后的尺寸),可以直接把字符串扩充到指定长度,多出来的部分应该是空的吧。

sort#

sort(begin(),end())这样用,反正可以直接按从小到大光速排序,这里的开始和结束参照 reverse,输入是完全一样的方法。说明前面的猜想是正确的😄。

好像还可以用自定义函数作为第三个输入参量来作为排序依据,这个等以后做题遇到的时候再写吧,没用过的东西一概不写😋。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。