算法題

第一題

一個(gè)數(shù)組有N個(gè)數(shù)对蒲,給一個(gè)數(shù)字S钩蚊,找到數(shù)組兩個(gè)數(shù)字加起來等于S,這個(gè)數(shù)組中只有一個(gè)解

根據(jù)數(shù)組構(gòu)建一個(gè)map齐蔽,key是數(shù)字,value是數(shù)字在數(shù)組的位置床估。遍歷數(shù)組含滴,查看map中是否有key=S-當(dāng)前數(shù)組位置值。如果有返回map的value和當(dāng)前位置丐巫,沒有的話當(dāng)前值和位置進(jìn)入map谈况。

第二題

兩個(gè)鏈表節(jié)點(diǎn)都存的是單個(gè)數(shù)字勺美,兩個(gè)鏈表從頭開始相加,最后的結(jié)果是鏈表表示兩個(gè)數(shù)字相加的結(jié)果碑韵。2->4->3 5->6->4. 相加結(jié)果是 7->0>8

1.遍歷2個(gè)鏈表赡茸,如果兩個(gè)鏈表節(jié)點(diǎn)都是空了退出循環(huán),判斷如果有進(jìn)位構(gòu)建一個(gè)數(shù)值為1的節(jié)點(diǎn)連到新的隊(duì)列祝闻。
2.遍歷流程是:計(jì)算2個(gè)節(jié)點(diǎn)的值+進(jìn)位值=n占卧,n%10等于當(dāng)前位的值,n/10等于進(jìn)位信息联喘。然后到下一個(gè)節(jié)點(diǎn)如此遞歸华蜒。

第三題

求一個(gè)字符串中最長子串,沒有重復(fù)字符

1. 從字符串第一個(gè)字符開始遍歷豁遭,往前推找最長子串叭喜,比如當(dāng)前位置10,往9位置看一直看到?jīng)]有重復(fù)字符
2. 求一個(gè)位置i往前看最長不重復(fù)子串蓖谢,依賴這個(gè)字符之前最后一次出現(xiàn)的位置和i-1位置求出的最長子串位置的最大值捂蕴。

第四題

求兩個(gè)有序數(shù)組的中位數(shù),如果數(shù)組加起來是偶數(shù)返回兩個(gè)數(shù)字除以2.

取第一個(gè)數(shù)組的上中位數(shù)闪幽,與第二個(gè)數(shù)組的上中位數(shù)比較啥辨。如果相等返回,如果小于取第一個(gè)數(shù)組大于中位數(shù)部分和第二個(gè)數(shù)組小于中位數(shù)部分沟使,組成一個(gè)新數(shù)組重新取中位數(shù)委可。大于的時(shí)候是一樣。

第五題

給你一個(gè)數(shù)組腊嗡,數(shù)組的值代表柱子高度着倾,選擇兩個(gè)柱子能裝最大的水量。

取第一個(gè)數(shù)字和最后一個(gè)數(shù)字算水量燕少。 如果左邊數(shù)字比較小卡者,左邊下標(biāo)右移然后計(jì)算水量。如果右邊數(shù)字小客们,右邊下標(biāo)左移計(jì)算水量崇决。左右下標(biāo)碰撞計(jì)算完畢,取計(jì)算水量的最大值

第六題

求一個(gè)字符串?dāng)?shù)組中底挫,所有字符串的公共最長子串

取第一個(gè)字符串恒傻,循環(huán)遍歷后續(xù)所有字符串,每個(gè)字符串與第一個(gè)字符串求公共子串建邓,保留位置盈厘。取所有位置最小的

第七題

一個(gè)數(shù)組,三個(gè)數(shù)字相加等于0官边,給出所有這種組合

1.求兩個(gè)數(shù)據(jù)相加等于N的所有組合(二元組)沸手,數(shù)組先排序,兩個(gè)指針外遇,一個(gè)頭一個(gè)尾,相加與N比契吉,等于N收集答案跳仿。如果小于N,左邊指針右移捐晶,如果大于N菲语,右指針左移。
2.假設(shè)結(jié)果的第一位為是數(shù)組的第一位租悄,那么就是求下標(biāo)1開始的子數(shù)組的二元組問題谨究。假設(shè)結(jié)果的第一位為數(shù)組第二位,依次類推

第八題

一個(gè)計(jì)數(shù)器泣棋,每個(gè)數(shù)字代表三個(gè)字母胶哲,如果按了N個(gè)數(shù)字,計(jì)算所有組合的字母潭辈。

1.按每個(gè)個(gè)數(shù)字可以做3個(gè)決定鸯屿,可以采取暴力深度遞歸,每個(gè)決定后再取下一個(gè)按鍵代表的3個(gè)決定把敢,直到按鍵按完寄摆。按完的時(shí)候每一步的決定組合起來就是答案。

第9題

給你一個(gè)鏈表修赞,刪除倒數(shù)第N個(gè)節(jié)點(diǎn)

雙指針婶恼,第一個(gè)指針先挪N位,第二個(gè)指針開始跟著挪柏副。

第10題

給一個(gè)字符串勾邦,包含3種括號(hào){[()]},判斷是否一一匹配

字符是左括號(hào)入棧割择,是右括號(hào)眷篇,棧彈出配對(duì),如果配對(duì)失敗不符合規(guī)則荔泳。如果字符串遍歷完都配對(duì)成功蕉饼,符合規(guī)則

第11題

一個(gè)字符 串只能包含(),假設(shè)要構(gòu)建的字符串長度為6玛歌,需要滿足括號(hào)配對(duì)昧港。比如()()(),((()))。問總共有多少這種組合

方案1:暴力遞歸支子,每個(gè)位置只能做()兩個(gè)決定创肥,組合出所有決定,然后判斷這些決定中哪些字符串合法。
方案2:需要剪枝瓤的,如果前面都做了三個(gè)(決定,后面不能夠再做(決定了吞歼。用數(shù)字表示做了幾次(的決定圈膏,下一個(gè)是(的決定取決于已經(jīng)做過幾個(gè)了。

第12題

合并k個(gè)排序好的鏈表

取各個(gè)鏈表的第一個(gè)節(jié)點(diǎn)丟入小根堆篙骡,然后彈出作為頭結(jié)點(diǎn)稽坤。取彈出節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)丟入小根堆,然后彈出堆頂元素糯俗,直到堆空尿褪。利用小根堆,priorityQueue得湘。

第13題

給一個(gè)有重復(fù)數(shù)字的數(shù)組杖玲,把所有不重復(fù)的數(shù)字放到數(shù)組前面。

兩個(gè)指針淘正,done在0位置摆马,cur在1位置。 判斷cur和done是否一致鸿吆,一致cur右移動(dòng)囤采。不一致done右移,done位置的數(shù)字和cur位置的數(shù)字互換惩淳,cur右移蕉毯。

第14題

一個(gè)數(shù)組找缺少的最小整數(shù),比如數(shù)組是129思犁,結(jié)果是3. 數(shù)組是569代虾,結(jié)果是4.

數(shù)組0位置放1,依次類推抒倚,知道找出最長有效數(shù)組褐着,比如找到1234,那最小正整數(shù)是5.
L指針指向0位置托呕,R指針指向末尾含蓉。 如果L指針指向的位置數(shù)字比R位置要放的數(shù)字(R+1)要大,L上的數(shù)字要廢棄项郊,L和R位置數(shù)字交換馅扣,R左移。直到L和R相撞着降,如果L上的數(shù)字不比R+1大差油,那把L上的數(shù)字V與V-1位置的數(shù)字交換。

第15題接雨水

image.png

求某一個(gè)位置可以裝的水量,等于這個(gè)位置往左的最高點(diǎn)和往右的最高點(diǎn)中的最小值與本身值的身高差蓄喇。所有位置的水量加起來

16. 跳躍游戲

image.png
指針在0位置发侵,判斷最大可到達(dá)位置為max。指針+1妆偏,判斷位置是否大于max刃鳄,如果大于,返回false钱骂。否則判斷從當(dāng)前位置能夠跳的最大距離與max比取最大值叔锐。

17. 全排列

image.png
第一個(gè)位置可以做N個(gè)決定,第二個(gè)位置可以做N-1個(gè)決定见秽,依次類推

18. 旋轉(zhuǎn)圖像

image.png
先旋轉(zhuǎn)最外層愉烙,再旋轉(zhuǎn)里面一層,依次類推
image.png

19. 計(jì)算一個(gè)數(shù)字的N次方

https://leetcode-cn.com/problems/powx-n/
解法:比如求Y的N次方解取,N按二進(jìn)制表示步责,比如10次方:1010。代表Y的2次方+Y的8次方禀苦。

image.png

20.螺旋矩陣

https://leetcode-cn.com/problems/spiral-matrix/
解答:先打印最外層勺择,然后打印里面一層,直到結(jié)束伦忠。最里面一層可能是一個(gè)圈省核,可能是一行或者一列,或者一個(gè)點(diǎn)昆码。

21. 不同路徑

https://leetcode-cn.com/problems/unique-paths/
解答:第一行和第一列每一個(gè)格子到達(dá)只有一種走法气忠,第(x,y)個(gè)格子抵達(dá)的走法等于x-1,y和x,y-1兩個(gè)格子走法相加谬莹。

22.不同路徑II

https://leetcode-cn.com/problems/unique-paths-ii/submissions/
解答:有障礙物的格子走法變成0绞幌,其他的走法與第一種相同厂财。

23.x的平方根

https://leetcode-cn.com/problems/sqrtx/
解答:二分法御板,1-N二分,如果中間位置m*m大于n左邊找蒸矛,否則右邊找惧所。

24. 爬樓梯

https://leetcode-cn.com/problems/climbing-stairs/submissions/

25. 矩陣置零

https://leetcode-cn.com/problems/set-matrix-zeroes/

26. 顏色分類

https://leetcode-cn.com/problems/sort-colors/
首先辅肾,迭代計(jì)算出0陪毡、1 和 2 元素的個(gè)數(shù)米母,然后按照0、1毡琉、2的排序铁瞒,重寫當(dāng)前數(shù)組

27. [只出現(xiàn)一次的數(shù)字】

https://leetcode-cn.com/problems/single-number/
所有的數(shù)字進(jìn)行異或操作,結(jié)果就是

28. [復(fù)制帶隨機(jī)指針的鏈表]

(https://leetcode-cn.com/problems/copy-list-with-random-pointer/)
每個(gè)節(jié)點(diǎn)進(jìn)行復(fù)制桅滋,放入map慧耍,key為原節(jié)點(diǎn),value為復(fù)制后節(jié)點(diǎn)。然后處理復(fù)制出來節(jié)點(diǎn)的指針芍碧。

29. 單詞拆分

根據(jù)前綴劃分煌珊,
場景1:字符串第一個(gè)字符是否在字典中,如果在泌豆,分解方法等于后續(xù)子字符串的分解方法怪瓶。
場景2:字符串前2個(gè)字符是否在字典中,如果在践美,,分解方法等于后續(xù)子字符串的分解方法找岖。
依次類推陨倡。改動(dòng)態(tài)規(guī)劃:【0,j】區(qū)間是否可以被拆分许布,取決于之前的某個(gè)i位置(i<j)能否被拆分+[i,j]是否在字典中(i從0到j(luò)遍歷)

30.#### 環(huán)形鏈表

一個(gè)快指針兴革,一次走2步,一個(gè)慢指針走1步蜜唾。如果快指針走出去了杂曲,沒有環(huán)。如果兩指針相遇袁余,慢指針不動(dòng)擎勘,快指針從頭開始走,再次相遇即是入口

31.#### LRU 緩存

雙鏈表(自己實(shí)現(xiàn))+map
map颖榜,存key和kv構(gòu)建的node棚饵,鏈表從尾部放入node(頭是最久數(shù)據(jù))。
get的時(shí)候從map中拿掩完,然后調(diào)整node的位置噪漾。

32.#### 排序鏈表

鏈表用歸并排序,拆成2部分排序且蓬,然后合并欣硼。

33.#### 直線上最多的點(diǎn)數(shù)

必經(jīng)過某個(gè)點(diǎn),算出最長路徑恶阴。遍歷后續(xù)所有點(diǎn)與某個(gè)點(diǎn)算斜率诈胜,放入map(key為斜率,value為節(jié)點(diǎn))

34.#### 逆波蘭表達(dá)式求值

棧冯事,數(shù)字入棧耘斩,遇到運(yùn)算符彈出2個(gè)數(shù)字計(jì)算重新入棧

36.#### 乘積最大子數(shù)組

求每個(gè)以nums[i]結(jié)尾的子數(shù)組最大乘積,最大乘積有3種情況:自己就是最大桅咆,自己是整數(shù)的時(shí)候乘以nums[i-1]的最大乘積括授,自己是負(fù)數(shù)的時(shí)候乘以nums[i-1]的最小乘積。取3者最大。

37.#### 最小棧

實(shí)現(xiàn)一個(gè)棧荚虚,可以push和pop方法和獲取最小元素的方法
解決:設(shè)計(jì)2個(gè)棧薛夜,第一個(gè)棧正常壓,第二個(gè)棧進(jìn)入的時(shí)候判斷棧里的元素是否要小版述,如果小就棧頂元素重復(fù)壓梯澜,否則數(shù)據(jù)進(jìn)棧

38.###### 相交鏈表

算每個(gè)鏈表的長度,假設(shè)是 100和80渴析,都遍歷到最后晚伙,如果最后節(jié)點(diǎn)不相交,鏈表不相交俭茧。如果尾節(jié)點(diǎn)相交咆疗,長鏈路從頭節(jié)點(diǎn)開始走20步驟,短鏈表指針開始走母债,相遇的時(shí)候即是第一個(gè)相交節(jié)點(diǎn)午磁。

39.#### 尋找峰值

找到一個(gè)數(shù)組中的一個(gè)局部高點(diǎn),用logn算法
解法:第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)先判斷毡们,如果第一個(gè)和最后一個(gè)都不是迅皇,表示數(shù)字高于0位置低于尾位置。進(jìn)行二分如果中間點(diǎn)大于中間前一個(gè)位置和后一個(gè)位置衙熔,則返回m登颓。如果不是,左側(cè)比m小左邊繼續(xù)二分红氯。否則肯定是右側(cè)比他大挺据,右側(cè)二分。

40.缺失區(qū)間

1.遍歷數(shù)組脖隶,判斷每個(gè)數(shù)字與區(qū)間lower的區(qū)間扁耐,然后把lower增長到這個(gè)數(shù)字。遍歷第二個(gè)數(shù)字判斷與lower的區(qū)間产阱,依次執(zhí)行婉称。

41.#### 分?jǐn)?shù)到小數(shù)

a/b作為小數(shù)點(diǎn)前部分,余數(shù)*10/b,把余數(shù)的位置map記錄下來构蹬,如此往后計(jì)算王暗,直到余數(shù)重復(fù)。

42.#### 多數(shù)元素

依次刪除2個(gè)不同的數(shù)字庄敛,最后留下來的數(shù)字就是答案俗壹。靶子血量的概念。數(shù)字進(jìn)來藻烤,判斷血量為0绷雏,數(shù)字作為靶子头滔,血量+1。如果血量不為0涎显,判斷數(shù)字是否等于靶子坤检,等于血量+1,否則血量-1.

43.#### 顛倒二進(jìn)制位

獲取32數(shù)字每一位期吓,先獲取第一位早歇,在獲取第二位。第一位放入結(jié)果中讨勤,遍歷依次結(jié)果左移一位箭跳,依次類推

44.#### Excel 表列序號(hào)

45.#### 最大數(shù)

將數(shù)組排序,排序規(guī)則是a.b>b.a a排在前面潭千,b.a>a.b谱姓,b排在前面

46.#### 輪轉(zhuǎn)數(shù)組

左部分逆序,右部分逆序脊岳,整體逆序

47.#### 位1的個(gè)數(shù)

m&(~m+1)提取最后一個(gè)1,統(tǒng)計(jì)數(shù)+1垛玻,然后m^=提取一個(gè)1后面的結(jié)果割捅,判斷m不為空,如此循環(huán)即可

48.#### 打家劫舍

討論從0位置開始打劫帚桩,必需包含位置i的最大打劫價(jià)值亿驾。dp[i]=Math.max(dp[i-1],(dp[i-2]+nums[i])

49.#### 島嶼數(shù)量

遍歷二維數(shù)組,遇到1就改為2账嚎,并且上下左右把所有1改為2莫瞬,島嶼次數(shù)+1.

50.#### 快樂數(shù)

不停計(jì)算,用set保留每一次計(jì)算的結(jié)果郭蕉,如果下一次的結(jié)果在set里面存在則不是快樂數(shù)疼邀。

50.#### 課程表

課程依賴關(guān)系建立成一張圖,先取入度為0的節(jié)點(diǎn)召锈,依次取下一階段入度為0的節(jié)點(diǎn)旁振,直到課程都遍歷完,所有入度為0的節(jié)點(diǎn)數(shù)等于依賴數(shù)涨岁。

51.#### 數(shù)組中的第K個(gè)最大元素

快速排序拐袜,找到一個(gè)數(shù)字,如果剛好是k大元素梢薪,返回蹬铺,如果不是從左邊或者右邊找

52.#### 二叉搜索樹中第K小的元素

中序遍歷,訪問的第k個(gè)元素

53.#### 回文鏈表

快慢指針秉撇,快指針走2步甜攀,慢指針走一步秋泄,定位到中間節(jié)點(diǎn),然后把中間節(jié)點(diǎn)的后面部分鏈表反轉(zhuǎn)赴邻,接著比較2部分鏈表印衔。

54.#### 二叉樹的最近公共祖先

map存放每個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)k:節(jié)點(diǎn),v:父節(jié)點(diǎn)姥敛。找p的所有父節(jié)點(diǎn)放入Set中奸焙,依次找q的父節(jié)點(diǎn),如果節(jié)點(diǎn)在Set中彤敛,那就是最近公共祖先

55.#### 刪除鏈表中的節(jié)點(diǎn)

把下一個(gè)節(jié)點(diǎn)的值賦給當(dāng)前節(jié)點(diǎn)与帆,當(dāng)前節(jié)點(diǎn)指針指向下下個(gè)節(jié)點(diǎn)

56.#### 尋找重復(fù)數(shù)

環(huán)形鏈表概念,慢指針一步墨榄,快指針2步玄糟,快慢指針相遇,慢指針歸0袄秩,快指針和慢指針都走一步阵翎,相遇即是結(jié)果。 我們對(duì)nums 數(shù)組建圖之剧,每個(gè)位置 i 連一條 i→nums[i] 的邊.

57.#### 基本計(jì)算器 II

定義一個(gè)棧郭卫,結(jié)果是棧里元素相加。 第一個(gè)數(shù)字num1先入棧背稼,第二個(gè)是計(jì)算符號(hào)先變量暫存ys1贰军,取第三個(gè)數(shù)字num3完成后,到第2個(gè)運(yùn)算符ys2的時(shí)候蟹肘,判斷第二個(gè)計(jì)算符合ys1是什么词疼。如果是+,數(shù)據(jù)num3 push棧帘腹,如果是-贰盗,push負(fù)的num3。如果是*num3與棧pop數(shù)據(jù)num1相乘入棧阳欲,如果是除棧pop數(shù)據(jù)num1除數(shù)據(jù)num3. 然后暫存ys2.

58.#### 除自身以外數(shù)組的乘積

遍歷數(shù)組童太,找到所有不是0的數(shù)字的乘積為all,找到多少個(gè)0假設(shè)問zeros胸完。如果zeros沒有书释,則每個(gè)nums的值等于all/自己,如果zeros=1赊窥,只有值為0的位置等于all爆惧,其他位置等于0. 如果zeros>1所有位置等于0

59.#### 搜索二維矩陣 II

從第一行最后面一個(gè)元素m開始找,如果target>m,往下找锨能,如果targe<m往左找扯再。

60. 有效的字母異位詞

用一個(gè)256的數(shù)組芍耘,記錄每一個(gè)字母出現(xiàn)的次數(shù),比如字母a的ascii碼是97熄阻,那num[97]++.遍歷一個(gè)字符串得到斋竞。 遍歷另外一個(gè)字符串,將統(tǒng)計(jì)字母的次數(shù)--秃殉,一旦有一個(gè)減成負(fù)數(shù)返回不是坝初。

61. #### 最長遞增子序列

定義dp[i]為必需包含i位置的最長子序列,它等于前面所有數(shù)字小于自己位置的dp[j]的最大值+1钾军。 結(jié)果就是所有dp中的最大值鳄袍。

62.尋找名人,一個(gè)節(jié)點(diǎn)吏恭,所有其他節(jié)點(diǎn)都認(rèn)識(shí)他

一次遍歷拗小,找到后面所有節(jié)點(diǎn)都不認(rèn)識(shí)他。假設(shè)他為80位置樱哼,總共100個(gè)點(diǎn)哀九。
第二次遍歷,前面79個(gè)點(diǎn)判斷是否都認(rèn)識(shí)80的位置搅幅。如果是返回80位置阅束。
算了放棄。盏筐。

63.#### 完全平方數(shù)

64.#### 移動(dòng)零

兩個(gè)指針i第一個(gè)指向-1围俘,第二個(gè)j從0開始砸讳,如果nums[j]!=0 琢融,將nums[j]與nums[i+1]交換,并且i+1.j遍歷完數(shù)組即可簿寂。

65. 生命游戲

66. #### 數(shù)據(jù)流的中位數(shù)

構(gòu)建大根堆漾抬,小根堆。 大根堆為空進(jìn)大根堆常遂,數(shù)據(jù)小于大根堆頂纳令,進(jìn)大根堆否則進(jìn)小根堆。進(jìn)行balance克胳,如果大根堆數(shù)量等于小根堆數(shù)量+2平绩,大根堆彈出堆頂進(jìn)入小根堆。小根堆數(shù)量=大根堆數(shù)量+2漠另,小根堆彈出堆頂進(jìn)入大根堆捏雌。
數(shù)據(jù)遍歷完成后,如果大根堆數(shù)量等于小根堆數(shù)量笆搓,兩個(gè)都彈出堆頂相加除2. 否則哪個(gè)堆多一個(gè)元素取對(duì)應(yīng)堆元素性湿。

67. 二叉樹的序列化與反序列化

按層遍歷纬傲,先把缺的左節(jié)點(diǎn)或者右節(jié)點(diǎn)補(bǔ)空,然后按層訪問放入數(shù)組中肤频,接著反序列就好

68.#### 區(qū)域和檢索 - 數(shù)組可修改

indexTree. 下標(biāo)從1開始叹括,tree更新的時(shí)候,tree[i]更新宵荒,并且tree[i]+右邊二進(jìn)制1更新汁雷,持續(xù)+右邊1更新。sum的時(shí)候骇扇,tree[i]+ (tree[i]-右邊二進(jìn)制1的數(shù)據(jù))

69#### 四數(shù)相加 II

分治思想摔竿,先遍歷2個(gè)數(shù)組,計(jì)算所有組合相加和出現(xiàn)的次數(shù)map少孝,遍歷后面2個(gè)數(shù)組继低,所有組合中,一個(gè)一個(gè)判斷是否在前面加工的map中出現(xiàn)相反數(shù)稍走,如果是收集結(jié)果袁翁。

70.#### 計(jì)算右側(cè)小于當(dāng)前元素的個(gè)數(shù)

放棄

71. #### 零錢兌換

定義dp[i]為湊齊i元需要的最少硬幣,那么dp[i]=min(各個(gè)硬幣分別必需出現(xiàn)的最小值dp[i-coin[j]]).

72.#### 擺動(dòng)排序 II

排序婿脸,然后按中間分隔粱胜,然后把后面部分的依次插入前面部分的中間。

73.#### 奇偶鏈表

奇數(shù)節(jié)點(diǎn)單獨(dú)生成一個(gè)鏈表狐树,偶數(shù)節(jié)點(diǎn)單獨(dú)生成一個(gè)鏈表焙压,然后把鏈表連起來。

74.#### 矩陣中的最長遞增路徑

定義一個(gè)函數(shù)process(int[][]matrix, int i, int j)表示從i,j出發(fā)的最長路徑抑钟。里面遞歸從上下左右走涯曲。 遞歸會(huì)比較耗時(shí),定義一個(gè)dp[i][j]在塔,記錄從i,j出發(fā)的最長路徑幻件。process方法先判斷dp[i][j]是否有值,有的話蛔溃,直接返回绰沥,規(guī)避重復(fù)計(jì)算。

75.#### 遞增的三元子序列

問題等價(jià)于贺待,nums[i]左邊的最小值是否小于nums[i], 右邊的最大值是否大于nums[i]. 構(gòu)建2個(gè)數(shù)組徽曲,最小值數(shù)組和最大值數(shù)組。

76. 至多包含 K 個(gè)不同字符的最長子串

滑動(dòng)窗口:只要窗口內(nèi)元素個(gè)數(shù)小于k就不斷擴(kuò)張窗口麸塞,隨后如果大于k就不斷收縮窗口

77.#### 前 K 個(gè)高頻元素

遍歷數(shù)組秃臣,統(tǒng)計(jì)每個(gè)數(shù)字的個(gè)數(shù),當(dāng)做一個(gè)對(duì)象(兩個(gè)屬性喘垂,一個(gè)值甜刻,一個(gè)統(tǒng)計(jì)次數(shù))绍撞。構(gòu)建小根堆,小根堆大小為k得院,

78. #### 兩整數(shù)之和

改成位運(yùn)算傻铣,a^b為無進(jìn)位相加,a&b<<右移一位祥绞,直到進(jìn)位信息為0.

79.#### 有序矩陣中第 K 小的元素

構(gòu)建小根堆非洲,小根堆的元素從0,0開始,0,0彈出蜕径,把右邊和下邊的數(shù)據(jù)進(jìn)入小根堆两踏。依次彈出堆頂,然后把彈出元素的右邊和下邊進(jìn)入堆兜喻。

80#### O(1) 時(shí)間插入梦染、刪除和獲取隨機(jī)元素

兩個(gè)map,第一個(gè)k是值朴皆,v是第幾次進(jìn)來的帕识,size初始化為0,第二個(gè)mapk是位置遂铡,v是值肮疗。第二個(gè)map的k要保證連續(xù),如果remove元素扒接,末尾元素挪動(dòng)到空的位置伪货。

81.#### 打亂數(shù)組

隨機(jī)選擇一個(gè)數(shù)字與N-1交換,然后隨機(jī)選擇一個(gè)數(shù)字(在0-n-2區(qū)間)與N-2交換

82.#### 字符串中的第一個(gè)唯一字符

統(tǒng)計(jì)每一個(gè)字符出現(xiàn)的次數(shù)钾怔,用int[]256數(shù)組表示碱呼。 遍歷字符串,發(fā)現(xiàn)哪個(gè)字符的統(tǒng)計(jì)次數(shù)為1即是結(jié)果蒂教。

83.#### 最長有效括號(hào)

子串問題巍举,以什么什么結(jié)尾脆荷。 以i結(jié)尾的最長子串凝垛,為i-1位置的最長,考慮這個(gè)最長占的長度前一個(gè)字符是否為(蜓谋。如果是再+2梦皮,然后再加前一個(gè)的dp值。

84.#### 組合總和

遞歸函數(shù)(arr, index,target),target要湊的數(shù)桃焕,index表示只能使用0-index的數(shù)剑肯,arr是所有數(shù)字。

85. #### 最大正方形

dp[i][j]必需以這個(gè)ij作為右下角的情況下最大的正方形观堂。dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1;

86. #### 翻轉(zhuǎn)二叉樹

遞歸反轉(zhuǎn)让网,先反轉(zhuǎn)右節(jié)點(diǎn)呀忧,然后把右節(jié)點(diǎn)賦給左節(jié)點(diǎn)。然后反轉(zhuǎn)左節(jié)點(diǎn)賦值給右節(jié)點(diǎn)溃睹。

87.#### 打家劫舍 III

節(jié)點(diǎn)x的最佳收益而账,1)不搶x,左子樹不搶和搶收益的最大值+右子數(shù)搶與不搶的最大值因篇,4個(gè)值里面取一個(gè)泞辐。2)搶x,x的收益+不搶左子樹和不搶右子樹的最大值竞滓。這里說的左子樹不搶是指左子樹的頭結(jié)點(diǎn)不搶咐吼。

88.#### 字符串解碼

用棧

89#### 根據(jù)身高重建隊(duì)列

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市商佑,隨后出現(xiàn)的幾起案子锯茄,更是在濱河造成了極大的恐慌,老刑警劉巖茶没,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撇吞,死亡現(xiàn)場離奇詭異,居然都是意外死亡礁叔,警方通過查閱死者的電腦和手機(jī)牍颈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來琅关,“玉大人煮岁,你說我怎么就攤上這事』烈祝” “怎么了画机?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長新症。 經(jīng)常有香客問我步氏,道長,這世上最難降的妖魔是什么徒爹? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任荚醒,我火速辦了婚禮,結(jié)果婚禮上隆嗅,老公的妹妹穿的比我還像新娘界阁。我一直安慰自己,他們只是感情好胖喳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布泡躯。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪较剃。 梳的紋絲不亂的頭發(fā)上咕别,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音写穴,去河邊找鬼顷级。 笑死,一個(gè)胖子當(dāng)著我的面吹牛确垫,可吹牛的內(nèi)容都是我干的弓颈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼删掀,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼翔冀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起披泪,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤纤子,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后款票,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體控硼,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年艾少,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卡乾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缚够,死狀恐怖幔妨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谍椅,我是刑警寧澤误堡,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站雏吭,受9級(jí)特大地震影響锁施,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜杖们,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一悉抵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胀莹,春花似錦基跑、人聲如沸婚温。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荆秦,卻和暖如春篱竭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背步绸。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工掺逼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓤介。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓吕喘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親刑桑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氯质,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容