這幾周學習了查找,像對一個系統之類的進行操做都是增刪改,這些步驟不可缺乏的就是須要查找 在這章的學習裏,有比較熟悉的線性表查找,這和C的內容差很少,比較好理解,就是遍歷查找,只是須要遍歷的次數的算法的改進 數表查找運用了上章學習的樹結構,樹的查找理解起來還行,就是代碼不大會打 二叉排序樹的查找和樹形有關,能夠將其調整爲平衡二叉樹,根據失衡點,進行LL,RR,LR,RL調整 B+,B-樹是用於外查找的,好吧,顯然我不是很懂什麼是內外查找,對於B+,B-樹只是掌握了怎麼增長結點以及刪除結點 哈希表查找,上學期就有提過哈希數組,一種以空間換時間的算法,可使查找達到O(1),可是也有哈希衝突的問題,因此就有相對應的解決衝突的方法 我以爲哈希表查找只要哈希函數構建得好,以及哈希衝突處理的好,應該是這幾種算法裏最快的了
一開始的思路是根據題目中給的二叉搜索樹的定義,一個一個進行判斷,這樣的代碼比較複雜 後來想起二叉搜索樹的特色,中序遍歷是升序的,只要將中序遍歷獲得的數存入數組,再判斷是不是升序的就能夠了
對二叉樹進行中序遍歷,將獲得的數存進a數組中 for int j=1 to i if a[j-1]>=a[j]//若是中序遍歷不是升序的,就不是二叉搜索樹 return 0; end for return 1;
A1:第一個提交是用了定義一個一個判斷,第二個提交是用來上述的方法,代碼量也少了不少
一開始的想法是弄兩個輔助數組來存放,而且看是否存在該帳號或者密碼是否正確,而後我發現像這樣作要考慮不少東西頗有可能隕石超時,因而改爲了用C++的map來作
定義結構體Order 定義常量N,以及結構體類型數組,長度爲N,定義map容器 for int i=0 to N do 輸入命令,賬號,密碼 若是輸入的命令是登陸 判斷是否已存在該賬號 不是的話,提示錯誤 是的話,判斷密碼是否正確//這個時候就能夠利用map進行判斷,由於註冊時將賬號和密碼綁定到了一塊兒 若是輸入的命令是申請 判斷是否存在該帳號 是的話,提示錯誤 不是的話,完成註冊,而且將帳號和密碼用map關聯起來//即QQ[order[i].user ]==order[i].password end for
Q1:編譯錯誤,emmmm又是沒改編譯器,多種錯誤就是我按上述的一開始的想法去作的,有答案錯誤,也有段錯誤,告辭 A1:因而改用了map去作,將QQ[order[i].user ]==order[i].password關聯到一塊兒,查找帳號是否存在,用QQ.find(order[i].user )==QQ.end() 便可,不用再構造另外一個數組存放再去一一比較,不過也要遍歷一遍就對了,在匹配密碼是否正確時,也比較簡單,用QQ[order[i].user ]!=order[i].password 判斷一下便可
定義結構體Customer 定義常量N,K,M,定義結構體變量customer,定義map容器massage 輸入N,K for int i=0 to N do 輸入客戶身份證號碼以及里程的長度 若是里程小於k值 直接讓它等於k值 若是用戶不存在重複,就直接等於里程值 不然進行累加 end for 輸入M for int i=0 to M do 輸入查詢的身份證號碼 定義result=massage[customer[i].code];//用result代替,減小搜索次數 若是result=0//即用戶不存在 輸出提示錯誤信息 不然輸出result
Q1:一開始看題目,和上一題同樣嘛仍是用map作,很快咻咻咻就打完代碼了,而後愉快的按了提交,部分正確??有兩個測試運行超時了 A1:因而偷偷看了大佬的博客,用了一個語句ios::sync_with_stdio(false);//解除與stdio的綁定,雖然不懂,可是偷過來用用 Q2:因而有了17分,過了一個測試點,可是還有一個仍是過不了 A2:仍是乖乖的去請教大佬吧,大佬建議用hash_map試一下,由於hash_map的查找效率是O(1),可是顯然改了半天發現連編譯都不過,我仍是用map吧,開始瘋狂試探,越改分越低 A3:仍是繼續問大佬吧,顯然大佬就是大佬,他發現了我代碼裏的問題,附上以前的代碼,在這個代碼裏要查找了兩遍,第一遍查找是否存在,若是存在到了else語句裏仍是要再查找一遍。因而用一個result代替massage[customer[i].code],不存在時只要判斷是否爲0就能夠了,不用再查找一遍,輸出的話,也直接輸出result就能夠了,而後提交就答案正確了 Q3:可是問題又來了,當我打好註釋再次提交後,發現又錯了??難道我哪裏不當心改到了??我就把以前的正確代碼複製過來從新提交發現仍是錯的??發生了啥,難道對的機會是可遇不可求??改不動了,就這樣吧,起碼它對過
這題的解題思路是構造一個hashmap,遍歷每個字符串,將該字符串中的每個字符都和pattern中的每個字符進行一一對應,例如,第一個"abc",則遍歷以後,a對應pattern中的a;第二個"b"遍歷後對應pattern中的第而個"b";可是第三個"c"和pattern中的"b"不對應,因此該字符不能壓入list中。因此hashmap以pattern中的每一個字符爲key,以字符串中的每一個字符爲value,進行遍歷。可是這裏須要特別注意的地方是凡是pattern中不同的字符,所對應的字符串中的每個字符必須不同,哪怕對應到字符串中的字符沒有在hashmap中出現過,這須要單獨判斷
這題是力扣上的題,它是用hashmap來作,靈活的將模式串和字符串連在一塊兒,判斷模式是否同樣的話,用hashmap也能夠判斷模式裏是否有重複值,這樣,沒有重複值的就能夠很快判斷出來了