1.棧與佇列
1.1 貓狗佇列
新增佇列物件 class petenterqueue count 為時間戳
----》class dogcatqueue
1.2 漢諾塔
process(num,lef,middle,right,from,to)
4.2 最小路徑 new 乙個 d[i][j] = min(d[i-1][j] + d[i][j-1]) + m[i][j]
4.3最長公共子串行:
d[i][j] 即str1[0~i]跟str2[0~j]的最長
d[i][j] = max(d[i-1][j], d[i][j-1])
if str1[i] = str2[j] d[i][j] = max[dp[i-1][j-1]+1 , d[i][j]]
4.4最長公共子串 if(str1[i]==str2[j]) d[i][j] = d[i-1][j-1] + 1
4.5 n 皇后問題
int record = new int[n]
process (0 , record ,n )
public process( i ,record ,n ){
for j = 0 ;j if (isvalid(i,j,record )){
process( i+1,record,n) // i+1 是因為再下一行的意思,j+1在j全都遞迴回來之後,再+1
is valid( i , j ,record){
for k if (record[k]==j or abs(k-i) ==abs(record[k] - j) ) return false //同一列 ,或同一斜線 a-i == b-j
return true
5.字串問題
變行詞: 用map來count str1 ,再遍歷str 不斷 map-- ,如果有負則返回
數字字串求和: num = num*10 +cur -> res = res + num and num =0 (及下次如果是字母,res + 0)
字串轉整數 : 判斷是否大於 2*32 / 10 或者 等於 2*32 /10 但是 後一位 > 2*32 %10 考慮負數則很有趣
-2147483648 2147483647 則轉為負數來處理。
字串匹配問題:
6. 大資料與空間限制
2gb 從20億個整數中找到次數最多的。
2^ 32 = 4,294,967,296 = 43億
假設每個數字都不同 ,則hash key用32位能解決。假設1個數字20億,也能用32位解決。也就是說一條記錄要4b*2 = 8b
8b *1億 < 8億b =0.8gb ,所以 20 *0.8 =16gb 所以分成8份即可,每份 大約就2gb記憶體。是否需要考慮hash的效果,所以取16份?
7. 位操作
swap(a,b) -> a = a^b b = b^a a = a^b
獲取不同 與b不同就是 a(交換得到a) 與 b(此時已經是a,再次取反)不同就是a
8.陣列和矩陣
求最短通路
1 1 1 1 1
1 0 1 0 1
1 1 1 0 1
0 0 0 0 1
關鍵在於兩個佇列來記錄走通的位置,然後不斷pop出來,用佇列是因為要寬度優先。比如 (1,3)這個點肯定是直接往右最快,然後另一條迴路到打此點時,發現已經被標記則放棄,這是因為寬度優先,保證了被標記的點必定之前的路徑不大於此時的路徑。
while(){
1.walkup
2.walk down
3.walk left
4. walk right
walk(int pre ,int tor,int toc,int rect ,int map, quer,quec){
到達目的地或者 rect [tor][toc] ==0 或者 map!=0
return
map = pre +1
quer.add(tor)
quec.add(toc)
資料結構與演算法總結
本教材共十一章 第一章為資料結構與演算法概述,為本書學習基礎和預備知識。資料的邏輯結構是對資料之間關係的描述,有時就把邏輯結構簡稱為資料結構。邏輯結構形式地定義為 k,r 或 d,s 其中,k是 資料元素的有限集,r是k 上的關係的有限集。邏輯結構有四種基本型別 集合結構 線性結構 樹狀結構和網路結...
資料結構與演算法總結
class solution return void bubblesort vector int arr if flag break void selectsort vector int arr if minpos i swap arr minpos arr i void insertsort ve...
資料結構與演算法 排序演算法總結
排序演算法 1 冒泡 對資料的有序性 敏感,一旦排序完成就會 立刻停止,如果待排序的資料是基本有序的,他的排序效率是非常高的。也是實現最簡單的排序,不易出錯,安全性高。2 插入 在已經有序的資料中,新增新的資料,對這個組資料再進行排序比較適合插入排序。3 選擇 是氣泡排序的變種,不是正統的排序方法,...