學(xué)習(xí)筆記C++(鏈表蛤高、二分法--常見面試題分析)

鏈表:

無意間發(fā)現(xiàn)的一個(gè)面試總結(jié)感覺不錯(cuò)

劍指offer習(xí)題總結(jié)

鏈表是一種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),他的特點(diǎn)是用一組任意的存儲單元(可以是連續(xù)的恤批,也可以是不連續(xù)的)存放數(shù)據(jù)元素喜庞。

鏈表中每一個(gè)元素成為“結(jié)點(diǎn)”,每一個(gè)結(jié)點(diǎn)都是由數(shù)據(jù)域和指針域組成的雷猪,每個(gè)結(jié)點(diǎn)中的指針域指向下一個(gè)結(jié)點(diǎn)。Head是“頭指針”晰房,表示鏈表的開始,用來指向第一個(gè)結(jié)點(diǎn)殊者,而最后一個(gè)指針的指針域?yàn)镹ULL(空地址),表示鏈表的結(jié)束猖吴。

常見的基礎(chǔ)操作是插入、刪除等海蔽,詳細(xì)代碼參考


1共屈、鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)分析及代碼參考


2、鏈表的中間節(jié)點(diǎn)

分析:我們可以定義兩個(gè)指針准潭,一個(gè)每次移動(dòng)一步,另一個(gè)每次移動(dòng)兩步刑然。當(dāng)每次移動(dòng)兩步的指針指向了鏈表的尾節(jié)點(diǎn)時(shí)泼掠,每次移動(dòng)一步的指針正好處于中間位置挡逼,即我們要找的中間節(jié)點(diǎn)位置腻豌。當(dāng)然家坎,這是在不知道鏈表的長度,且為了減少時(shí)間復(fù)雜度的解法苏携。

代碼:

/*

????求鏈表的中間節(jié)點(diǎn)

*/??

pNode?getCenterPoint(pNode?head)??

{??

if?(head?==?NULL?||?head->next?==?NULL)?//如果鏈表為空做瞪,或僅有頭節(jié)點(diǎn)??

????{??

return?head;??

????}??


????pNode?pA?=?head;??

????pNode?pB?=?head;??


while(pB?!=?NULL?&&?pB->next?!=?NULL)??

????{??

????????pA?=?pA->next;??

????????pB?=?pB->next->next;????????

????}??

return?pA;??

}??


3、鏈表是否存在環(huán)

分析:判斷一個(gè)鏈表是否存在環(huán),可以定義兩個(gè)指針装蓬,一個(gè)每次移動(dòng)一步著拭,另一個(gè)每次移動(dòng)兩步。如果每次移動(dòng)兩步的指針指向了NULL牍帚,則說明不存在環(huán)儡遮;如果兩個(gè)指針相遇,則說明存在環(huán)履羞。

代碼:

/*

????判斷鏈表是否存在環(huán)

*/??

bool?isExitCycle(pNode?head)??

{??

if(head?==?NULL)??

????{??

return?false;??

????}??

????pNode?pA?=?head;??

????pNode?pB?=?head;??

while(pB->next?!=?NULL?&&?pB?!=?NULL)??

????{??

????????pB?=?pB->next->next;??

????????pA?=?pA->next;??

if(pA?==?pB)??

{//?若兩個(gè)指針相遇峦萎,則存在環(huán)??

return?true;??

????????}??

????}??

return?false;??

}


4、兩個(gè)鏈表的第一個(gè)公共結(jié)點(diǎn)

分析參考


5忆首、反轉(zhuǎn)鏈表:

分析參考(這個(gè)沒太理解有時(shí)間再看下)


6、輸入n個(gè)整數(shù)被环,找出其中最小的K個(gè)數(shù)

PS:補(bǔ)充點(diǎn)構(gòu)造函數(shù)知識

概念:

簡單地說糙及,vector是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,能夠增加和壓縮數(shù)據(jù)

C++ Vectors可以使用以下任意一種參數(shù)方式構(gòu)造:

vector();//1. 無參數(shù) - 構(gòu)造一個(gè)空的vector,

vector( size_type num, const TYPE &val );//2.?數(shù)量(num)和值(val) - 構(gòu)造一個(gè)初始放入num個(gè)值為val的元素的Vector?

vector( const vector &from );//?3. vector(from) - 構(gòu)造一個(gè)與vector from 相同的vector

vector( input_iterator start, input_iterator end );//?4. 迭代器(start)和迭代器(end) - 構(gòu)造一個(gè)初始值為[start,end)區(qū)間元素的Vector(注:半開區(qū)間).

vector和list的區(qū)別:

vector對于隨機(jī)訪問的速度很快筛欢,但是對于插入尤其是在頭部插入元素速度很慢浸锨,在尾部插入速度很快。list對于隨機(jī)訪問速度慢得多版姑,因?yàn)榭赡芤闅v整個(gè)鏈表才能做到柱搜,但是對于插入就快的多了,不需要拷貝和移動(dòng)數(shù)據(jù)剥险,只需要改變指針的指向就可以了聪蘸。另外對于新添加的元素,Vector采用的是從尾部追加表制,而List可以任意加入,同時(shí)可以高效的插入刪除元素健爬。list不支持隨機(jī)訪問。所以沒有?at(pos)和operator[]么介。

vector 中參數(shù)可執(zhí)行常用函數(shù):

1.push_back ? ? ? ? ?在數(shù)組的最后添加一個(gè)數(shù)據(jù)

2.pop_back ? ? ? ? ? 去掉數(shù)組的最后一個(gè)數(shù)據(jù)?

3.at ? ? ? ? ? ? ? ? 得到編號位置的數(shù)據(jù)

4.begin ? ? ? ? ? ? ?得到數(shù)組頭的指針

5.end ? ? ? ? ? ? ? ?得到數(shù)組的最后一個(gè)單元+1的指針

6.front ? ? ? ? ? ? ?得到數(shù)組頭的引用

7.back ? ? ? ? ? ? ? 得到數(shù)組的最后一個(gè)單元的引用

8.max_size ? ? ? ? ? 得到vector最大可以是多大

9.capacity ? ? ? ? ? 當(dāng)前vector分配的大小

10.size ? ? ? ? ? ?當(dāng)前使用數(shù)據(jù)的大小

11.resize ? ? ? ? ?改變當(dāng)前使用數(shù)據(jù)的大小娜遵,如果它比當(dāng)前使用的大,者填充默認(rèn)值12.reserve ? ? ? 改變當(dāng)前vecotr所分配空間的大小

13.erase ? ? ? ? ?刪除指針指向的數(shù)據(jù)項(xiàng)

14.clear ? ? ? ? ? 清空當(dāng)前的vector

15.rbegin ? ? ? ? 將vector反轉(zhuǎn)后的開始指針返回(其實(shí)就是原來的end-1)

16.rend ? ? ? ? ? 將vector反轉(zhuǎn)構(gòu)的結(jié)束指針返回(其實(shí)就是原來的begin-1)

17.empty ? ? ? ? 判斷vector是否為空

18.swap ? ? ? ? ?與另一個(gè)vector交換數(shù)據(jù)??

回到題目(輸入n個(gè)整數(shù)壤短,找出其中最小的K個(gè)數(shù))分析主要做個(gè)排序然后取出最小的k個(gè)數(shù)就可以了设拟,參考代碼

好奇時(shí)間復(fù)雜度怎么算出來的可以看看這塊

比如1題:

Sum1( int n )

{ int p=1, sum=0, m ; //1次

for (m=1; m<=n; m++) //n+1次

{ p*=m ; //n次

sum+=p ; } //n次

return (sum) ; //1次

}

最后總的次數(shù)為

1+(n+1)+n+n+1+1=3n+3

所以時(shí)間復(fù)雜度f(o)=n;(時(shí)間復(fù)雜度只管n的最高次方久脯,不管他的系數(shù)和表達(dá)式中的常量)不過要注意時(shí)間復(fù)雜度的f(x)在有限次時(shí)就用具體數(shù)值表示纳胧,無限次時(shí)就用n,n的平方桶现,log以2為底n的對數(shù)躲雅,其實(shí)很簡單就是看n的最高次方,看n的最高次方等于幾,f(x)就等于幾骡和。


二分法:

首先說一下二分法排序的原理相赁,算法思想簡單描述:?

1相寇、將low=0,值為1;high=9钮科,值為10(因?yàn)閿?shù)組下標(biāo)從0開始)唤衫;mid=(low+high)/2

2、將mid的值與查找的數(shù)作比較绵脯,如果mid<n佳励,即n在mid的右邊,所以左邊界變?yōu)閘ow = mid+1蛆挫,相反如果mid>n赃承,即n在mid的左邊,即右邊界要變成high=mid-1

常見面試?yán)?a target="_blank" rel="nofollow">參考


感覺自己數(shù)學(xué)思想欠缺悴侵,這種題最好的辦法是先據(jù)幾個(gè)數(shù)(1瞧剖、2、多)基本上算法思想就出來了可免,然后可以嘗試些偽代碼抓于,再詳細(xì)點(diǎn)是代碼具體函數(shù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市浇借,隨后出現(xiàn)的幾起案子捉撮,更是在濱河造成了極大的恐慌,老刑警劉巖妇垢,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巾遭,死亡現(xiàn)場離奇詭異,居然都是意外死亡修己,警方通過查閱死者的電腦和手機(jī)恢总,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睬愤,“玉大人片仿,你說我怎么就攤上這事∮热瑁” “怎么了砂豌?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長光督。 經(jīng)常有香客問我阳距,道長,這世上最難降的妖魔是什么结借? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任筐摘,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咖熟。我一直安慰自己圃酵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布馍管。 她就那樣靜靜地躺著郭赐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪确沸。 梳的紋絲不亂的頭發(fā)上捌锭,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音罗捎,去河邊找鬼观谦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宛逗,可吹牛的內(nèi)容都是我干的坎匿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼雷激,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了告私?” 一聲冷哼從身側(cè)響起屎暇,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驻粟,沒想到半個(gè)月后根悼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜀撑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年挤巡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酷麦。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矿卑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沃饶,到底是詐尸還是另有隱情母廷,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布糊肤,位于F島的核電站琴昆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馆揉。R本人自食惡果不足惜业舍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舷暮,春花似錦态罪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诸狭,卻和暖如春券膀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯遇。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工芹彬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叉庐。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓舒帮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陡叠。 傳聞我的和親對象是個(gè)殘疾皇子玩郊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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