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,輸入是完全一樣的方法。說明前面的猜想是正確的😄。

好像還可以用自定義函數作為第三個輸入參量來作為排序依據,這個等以後做題遇到的時候再寫吧,沒用過的東西一概不寫😋。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。