leetcode算法总结
Categories:
即使不靠算法吃饭,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啦。
以后随时更新…