leetcode算法总结

即使不靠算法吃饭,leetcode依然能让我在编程语言的使用上更上一层楼。

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

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

1. 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++)这样就能遍历啦。

2. string

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

assign

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

基本跟substr是一样的。

substr

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

3. for

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

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

以后随时更新…