算法分析 [折半吮蛹,字符串] 2019-02-21

1. 折半

1.1 從一維數(shù)組中求一個(gè)值/下標(biāo)

724.尋找數(shù)組的中心索引 Find Pivot Index medium
將(總數(shù))減去(左邊上一次累加的和)減去(本次的值) = O(N)吮旅,(如果有2個(gè)中心值征候,只保留左邊的中間值)累加值可以對(duì)比前一次的寞酿,也可以對(duì)比當(dāng)前

747.最大值至少是其他值的兩倍 Largest Number At Least Twice of easy
先求最大值下標(biāo)匠襟,再遍歷同事略過(guò)最大值下標(biāo)O(N)钝侠,可以考慮用s++,e--改成O(N/2)

1.2 根據(jù)一維數(shù)組,處理后返回一維數(shù)組

66. 數(shù)值加一 Plus One easy
法1. 使用隊(duì)列記錄酸舍,并用一個(gè)進(jìn)制位輔助表示是否+1(性能不好)
法2. 可以根據(jù)每個(gè)數(shù)是否為9帅韧,如果有一個(gè)不為9,都不會(huì)導(dǎo)致左位進(jìn)1啃勉,如果全都是9忽舟,則數(shù)組長(zhǎng)度+1,第一個(gè)值為1,其余值為0. time: O(n), space: O(1)

1.3 根據(jù)二維數(shù)組叮阅,找規(guī)律刁品,處理后返回一維數(shù)組

498. 對(duì)角線遍歷矩陣 Diagonal Traverse medium
難點(diǎn)在找規(guī)律,用row和col表示下標(biāo)浩姥,返回的總數(shù)是mn個(gè)數(shù)組哑诊,方向就2個(gè){上右{-1, 1}左下{1, -1}}表示及刻,并且出界情況就4種镀裤,row<0 || col<0 || row >m-1 || col >n-1,在不同的情況*下改變對(duì)應(yīng)的row和col下標(biāo) 以及 方向d{0, 1}

54. Spiral Matrix 螺旋矩陣 medium
找規(guī)律缴饭,用row和col表示下標(biāo)暑劝,返回的總數(shù)是mn個(gè)數(shù)組,并且邊界值[上下左右]颗搂,每次改變方向時(shí)要減少對(duì)應(yīng)的邊界值-1担猛,在不同的情況*下改變對(duì)應(yīng)的row和col下標(biāo),方向4個(gè)丢氢,{右{0,1}傅联,下{1,0},左{0,-1}疚察,上{-1,0}}蒸走,

1.4 查詢數(shù)據(jù)在有序列表中位置 若不存在則預(yù)估位置

35. 查詢一維數(shù)組插入的位置 Search Insert Position easy

折半法要注意 (a + b) /2 容易越界,可以用[a + (a-b)/2]

時(shí)間復(fù)雜度O(logn)貌嫡,空間復(fù)雜度O(1)
折半法
取最后定位的下標(biāo)low

74. 查詢二維有序數(shù)組中某個(gè)值下標(biāo) search-a-2d-matrix easy
時(shí)間復(fù)雜度O(logn)比驻,空間復(fù)雜度O(1)
折半法
雖然是二維數(shù)組,但是由于是有序的

240. 查詢二維無(wú)序數(shù)組中某個(gè)值下標(biāo) Search a 2D Matrix II medium
時(shí)間復(fù)雜度O(m+n)岛抄,空間復(fù)雜度O(1)
找規(guī)律
找到第1列的最右值
如果值比目標(biāo)大别惦,則向下移動(dòng)行
如果值比目標(biāo)小,則向左移動(dòng)列

153. 尋找旋轉(zhuǎn)排序數(shù)組中的最小值(數(shù)據(jù)不重復(fù)) Find Minimum in Rotated Sorted Array medium
法1. dp方法 + 折半 同時(shí)運(yùn)用了規(guī)則夫椭,有序時(shí)最小值一定是頭一個(gè)掸掸,無(wú)序時(shí)遍歷
時(shí)間復(fù)雜度O(logn),空間復(fù)雜度O(1)
設(shè)置一個(gè)min=Integer.MAX_VALUE蹭秋,每次傳入對(duì)應(yīng)的start和end扰付,如果nums[start]<nums[end]說(shuō)明nums[start]是最小的做比對(duì)直接返回,否則設(shè)下的一定是無(wú)序的感凤,折半悯周,if(nums[start]<=nums[mid])說(shuō)明最小值在另一邊
法2. 折半
時(shí)間復(fù)雜度O(logn),空間復(fù)雜度O(1)
如果nums[mid]>nums[mid+1]則mid+1最小值陪竿,如果nums[mid-1]>nums[mid]則mid最小值禽翼,否則nums[mid]>nums[0]意味最小值在右邊
法3. 折半
時(shí)間復(fù)雜度O(logn)屠橄,空間復(fù)雜度O(1)
先定位到最小值所在下標(biāo),nums[mid]>nums[hi]闰挡,意味著最小值在右側(cè)->lo=mid+1; 否則在左側(cè)->hi=mid;

33. 尋找旋轉(zhuǎn)排序數(shù)組中值的下標(biāo)(數(shù)據(jù)不重復(fù)) Search in Rotated Sorted Array medium
時(shí)間復(fù)雜度O(logn)锐墙,空間復(fù)雜度O(1)
先定位到最小值所在下標(biāo),由于數(shù)組是有序的长酗,那下標(biāo)則為偏移量溪北,使用折半查找,每次中位數(shù)+偏移值

81. 搜索旋轉(zhuǎn)排序數(shù)組(數(shù)據(jù)重復(fù)) II Search in Rotated Sorted Array II
todo

1.5 括號(hào)問(wèn)題

20. 有效的括號(hào) valid parentheses easy
使用stack校驗(yàn)

22. 輸入括號(hào)夺脾,輸出所有有效配對(duì)生成 Generate Parentheses medium
法1. 回溯法 時(shí)間復(fù)雜度O(),空間復(fù)雜度O(n)
使用開(kāi)關(guān)括號(hào)的特性之拨,進(jìn)行回溯,記錄一個(gè)值用s.length()==n做條件

1.6 快速逼近目標(biāo)值

744. 尋找比目標(biāo)字母大的最小字母 Find Smallest Letter Greater Than Target easy
法1. 時(shí)間復(fù)雜度O(logn) 空間復(fù)雜度O(1)
折半法咧叭,定位到i為目標(biāo)值下標(biāo)蚀乔,判斷i是否為最后一個(gè)值,是取第一個(gè)值

374. 猜數(shù)字大小 Guess Number Higher or Lower easy
法1. 時(shí)間復(fù)雜度O(logn) 空間復(fù)雜度O(1)
折半法菲茬,每次取中間值對(duì)比大小

375. 猜數(shù)字大小II Guess Number Higher or Lower II medium
todo

2. 字符串

2.1 傳入字符串吉挣,處理邏輯,返回字符串

67. Add Binary 二進(jìn)制求和 easy
從尾數(shù)開(kāi)始婉弹,以長(zhǎng)字符串做條件睬魂,從尾往頭遍歷,總和有3镀赌,2氯哮,1,0類型佩脊,設(shè)置一個(gè)全局增量
890. 查找和替換模式 Find and Replace Pattern
法1. 時(shí)間復(fù)雜度O(mn)蛙粘,空間復(fù)雜度O(mn) ,m是字符串?dāng)?shù)組個(gè)數(shù)威彰,n是字符串長(zhǎng)度
使用兩個(gè)Map,一個(gè)保存key=匹配模式,value=值穴肘,一個(gè)key=目標(biāo)值,value=匹配模式歇盼,逐個(gè)對(duì)比

3. 字符串/數(shù)組/雙指針

3.1 承載水位問(wèn)題

11. 容器可承載最大水位 Container With Most Water medium
法1. 雙指針,時(shí)間復(fù)雜度O(n)评抚,空間復(fù)雜度O(1)
寬度總是減少的
每次將水位低的一邊縮容豹缀,因?yàn)榈偷囊环經(jīng)Q定了上限

3.2 鏈表中的慢指針和快指針問(wèn)題
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市慨代,隨后出現(xiàn)的幾起案子邢笙,更是在濱河造成了極大的恐慌,老刑警劉巖侍匙,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氮惯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妇汗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門帘不,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人杨箭,你說(shuō)我怎么就攤上這事寞焙。” “怎么了互婿?”我有些...
    開(kāi)封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵捣郊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我慈参,道長(zhǎng)模她,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任懂牧,我火速辦了婚禮侈净,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘僧凤。我一直安慰自己畜侦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布躯保。 她就那樣靜靜地躺著旋膳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪途事。 梳的紋絲不亂的頭發(fā)上验懊,一...
    開(kāi)封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音尸变,去河邊找鬼义图。 笑死,一個(gè)胖子當(dāng)著我的面吹牛召烂,可吹牛的內(nèi)容都是我干的碱工。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奏夫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怕篷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起酗昼,我...
    開(kāi)封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤廊谓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后麻削,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸痹,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡春弥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了电抚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惕稻。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝙叛,靈堂內(nèi)的尸體忽然破棺而出俺祠,到底是詐尸還是另有隱情,我是刑警寧澤借帘,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布蜘渣,位于F島的核電站,受9級(jí)特大地震影響肺然,放射性物質(zhì)發(fā)生泄漏蔫缸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一际起、第九天 我趴在偏房一處隱蔽的房頂上張望尤莺。 院中可真熱鬧脑漫,春花似錦盒延、人聲如沸踱稍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)防症。三九已至,卻和暖如春哎甲,著一層夾襖步出監(jiān)牢的瞬間蔫敲,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工炭玫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奈嘿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓础嫡,卻偏偏與公主長(zhǎng)得像指么,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榴鼎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345