1.兩數(shù)之和
2.兩數(shù)相加
ps:不能直接求總和,再一位一位賦值,因?yàn)榭偤蜁?huì)超過long long的位數(shù)限制
3.無重復(fù)字符的最長(zhǎng)子串
思路:
利用字符的ascii碼作為數(shù)組的索引“鍵值”, index作為值,然后去做判斷
- 最長(zhǎng)回文子串
給定一個(gè)字符串 s,找到 s 中最長(zhǎng)的回文子串。你可以假設(shè) s 的最大長(zhǎng)度為1000。
思路:區(qū)分最長(zhǎng)回文子串是偶數(shù)或奇數(shù)的兩種情況(奇數(shù)index入?yún)鱥,i。偶數(shù)index入?yún)鱥-1, i)。
7.反轉(zhuǎn)整數(shù)
思路:
1.可用to_string, atoll,atoi函數(shù)的話,就是反轉(zhuǎn)字符串,然后判斷一下別超出區(qū)間。
2.若不可用以上函數(shù),就手動(dòng)用除法算位數(shù),用取余得新值
- 字符串轉(zhuǎn)整數(shù) (atoi)
思路:利用ascii碼確定數(shù)字:str[i]-'0'
整數(shù)轉(zhuǎn)羅馬數(shù)字
羅馬數(shù)字轉(zhuǎn)整數(shù)
做一個(gè)邏輯判斷,如果前一位小于后一位,則+=后一位減前一位的值,下標(biāo)后移兩位,否則直接+=當(dāng)前位的值,下標(biāo)后移一位
注:類型string取一位出來是char類型,而不再是string類型
14.最長(zhǎng)公共前綴

注:是公共前綴不是公共子串
- 三數(shù)之和
思路:
1.利用三個(gè)指針將三數(shù)之和轉(zhuǎn)換為兩數(shù)之和。
2.需要做的工作是每個(gè)指針移動(dòng)的時(shí)候都要做去重處理
19.刪除鏈表的倒數(shù)第N個(gè)節(jié)點(diǎn)

思路:多指針同時(shí)移動(dòng)
20.有效的括號(hào)

思路:利用棧
-
合并兩個(gè)有序鏈表
21.png
思路:簡(jiǎn)單,不談
23.合并K個(gè)排序鏈表

思路:實(shí)現(xiàn)兩個(gè)鏈表的合并,然后分治
-
k個(gè)一組翻轉(zhuǎn)鏈表
25.png
思路:遞歸就完事了
刪除排序數(shù)組中的重復(fù)項(xiàng)(80. 刪除排序數(shù)組中的重復(fù)項(xiàng) II)
兩數(shù)相除
給定兩個(gè)整數(shù),被除數(shù) dividend 和除數(shù) divisor。將兩數(shù)相除,要求不使用乘法、除法和 mod 運(yùn)算符。
返回被除數(shù) dividend 除以除數(shù) divisor 得到的商。
思路:
1.位運(yùn)算
2.然后各種考慮邊界值
33.搜索旋轉(zhuǎn)排序數(shù)組

思路:
1.找到反轉(zhuǎn)的序號(hào)
2.按照反轉(zhuǎn)的序號(hào),比較第一個(gè)值與target的大小,然后決定對(duì)哪部分進(jìn)行二分查找
-
實(shí)現(xiàn) pow(x, n),即計(jì)算 x 的 n 次冪函數(shù)。
50.png
思路:
1.考察的是次數(shù)的移位,n右移一位,則是最終值的一半,利用分制思想遞歸。
2.考慮邊界值,包括n等于0,1,-1以及最終結(jié)果INFINITY(超出double范圍)的情況。
-
跳躍游戲
image.png
思路:貪心算法,只關(guān)心眼下是不是最好的選擇
-
旋轉(zhuǎn)鏈表
image.png
思路:
1.先寫右移一次的函數(shù)
2.如果k>n, 先k%=n,然后再遍歷k次1中的函數(shù)
-
反轉(zhuǎn)鏈表 II
92.png
思路:在反轉(zhuǎn)鏈表1的基礎(chǔ)上,加幾個(gè)條件判斷
1.ListNode *breakPoint = NULL; //第一次斷開的地方 m!=1 才會(huì)有值,否則為NULL
2.ListNode *unionPoint = NULL; //要鏈接的地方 n小于總個(gè)數(shù)的時(shí)候才會(huì)有值,否則為NULL
3.ListNode *unionEnd = NULL; //記錄需要反轉(zhuǎn)的部分的最后一個(gè)節(jié)點(diǎn),即開始翻轉(zhuǎn)時(shí)記錄第一個(gè)
- 二叉樹的中序遍歷(144. 二叉樹的前序遍歷, 145. 二叉樹的后序遍歷)
遞歸就完事了
- 從前序與中序遍歷序列構(gòu)造二叉樹(106. 從中序與后序遍歷序列構(gòu)造二叉樹)
思路:
遞歸三個(gè)整數(shù)參數(shù)分別為
1.inFrom:中序遍歷數(shù)組的起始位置
2.inTo:中序遍歷數(shù)組的結(jié)束位置
3.preFrom:前序遍歷數(shù)組的起始位置(遍歷右子樹的這個(gè)參數(shù)為:preFrom+index-inFrom+1中的index-inFrom是遍歷完以后對(duì)于preFrom的相對(duì)位移)
(106: 遍歷左子樹的postFrom這個(gè)參數(shù)postFrom-(inTo-i)-1中的inTo-i是右子樹的長(zhǎng)度)
-
二叉樹的最小深度
111.png
-
買賣股票的最佳時(shí)機(jī)
121.png
思路:搞一個(gè)變量,記錄最小的元素,每次往下遍歷都用當(dāng)前index的元素減去最小的元素,結(jié)果大于前一次的差值則用,小于則用前一次的差值。
-
買賣股票的最佳時(shí)機(jī) II
122.png
思路:
1.start、end標(biāo)記第一個(gè)元素,遍歷后面的,當(dāng)前元素大于start則求差。
2.start、end指向當(dāng)前元素
3.考慮邊界值,即當(dāng)遍歷最后一個(gè)元素arr[i]時(shí),判斷最后一個(gè)arr[i]和倒數(shù)第二個(gè)arr[i-1]的大小關(guān)系,如果最后一個(gè)大于倒數(shù)第二個(gè),再一次求start與end的差值。
4.+=運(yùn)算將所有的差值相加
-
驗(yàn)證回文串
125.png
思路:要注意兩個(gè)指針的邊界值,隨時(shí)進(jìn)行大小寫轉(zhuǎn)換等等
136.只出現(xiàn)一次的數(shù)字

思路:用0異或,因?yàn)椋?br> ①.a ^ b = b ^ a
②. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
- 刪除鏈表中的節(jié)點(diǎn)(主要是考慮邊界值:需要?jiǎng)h除的節(jié)點(diǎn)在第一個(gè)和最后一個(gè)時(shí))
206.反轉(zhuǎn)鏈表
ps:主要是掌握遞歸反轉(zhuǎn)的思路,迭代反轉(zhuǎn)簡(jiǎn)單。
- 第一個(gè)錯(cuò)誤的版本
思路:跟一般的二分查找相比,條件應(yīng)該是start==end的時(shí)候結(jié)束
- 字符串中的第一個(gè)唯一字符
思路:利用ascii碼
647.回文子串

思路:中心為一個(gè)開始的子串,中心為兩個(gè)開始的子串
- 有效的括號(hào)字符串
678.png
思路:
1.利用棧
2.是 ')' 時(shí),棧中必須有 '(' 或 ''
3.剩余棧中必須'('在''左邊,通過序號(hào)判斷,先入棧的序號(hào)小
4.最后棧中必須沒有 '('
-
二叉搜索樹的最小絕對(duì)差(同783)
783.二叉搜索樹結(jié)點(diǎn)最小距離
783.png
思路:
先中序遞歸把鏈表的值轉(zhuǎn)成一個(gè)有序數(shù)組,然后算所有相鄰的兩個(gè)元素的差值











