chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編程面試的 9 大算法概念

Linux愛(ài)好者 ? 來(lái)源:未知 ? 作者:鄧佳佳 ? 2018-03-20 14:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以下是在編程面試中排名前 9 的算法相關(guān)的概念,我會(huì)通過(guò)一些簡(jiǎn)單的例子來(lái)闡述這些概念。由于完全掌握這些概念需要更多的努力,因此這份列表只是作為一個(gè)介紹。本文將從Java的角度看問(wèn)題,包含下面的這些概念:

1. 字符串

2. 鏈表

3. 樹(shù)

4. 圖

5. 排序

6. 遞歸 vs. 迭代

7. 動(dòng)態(tài)規(guī)劃

8. 位操作

9. 概率問(wèn)題

1. 字符串

如果IDE沒(méi)有代碼自動(dòng)補(bǔ)全功能,所以你應(yīng)該記住下面的這些方法。

toCharArray()// 獲得字符串對(duì)應(yīng)的char數(shù)組

Arrays.sort()// 數(shù)組排序

Arrays.toString(char[]a)// 數(shù)組轉(zhuǎn)成字符串

charAt(intx)// 獲得某個(gè)索引處的字符

length()// 字符串長(zhǎng)度

length// 數(shù)組大小

2. 鏈表

在Java中,鏈表的實(shí)現(xiàn)非常簡(jiǎn)單,每個(gè)節(jié)點(diǎn)Node都有一個(gè)值val和指向下個(gè)節(jié)點(diǎn)的鏈接next。

classNode{

intval;

Nodenext;

Node(intx){

val=x;

next=null;

}

}

鏈表兩個(gè)著名的應(yīng)用是棧Stack和隊(duì)列Queue。

棧:

classStack{

Nodetop;

publicNode peek(){

if(top!=null){

returntop;

}

returnnull;

}

publicNode pop(){

if(top==null){

returnnull;

}else{

Nodetemp=newNode(top.val);

top=top.next;

returntemp;

}

}

publicvoidpush(Noden){

if(n!=null){

n.next=top;

top=n;

}

}

}

隊(duì)列:

classQueue{

Nodefirst,last;

publicvoidenqueue(Noden){

if(first==null){

first=n;

last=first;

}else{

last.next=n;

last=n;

}

}

publicNode dequeue(){

if(first==null){

returnnull;

}else{

Nodetemp=newNode(first.val);

first=first.next;

if(last==temp)last=first;

returntemp;

}

}

}

3. 樹(shù)

這里的樹(shù)通常是指二叉樹(shù),每個(gè)節(jié)點(diǎn)都包含一個(gè)左孩子節(jié)點(diǎn)和右孩子節(jié)點(diǎn),像下面這樣:

classTreeNode{

intvalue;

TreeNodeleft;

TreeNoderight;

}

下面是與樹(shù)相關(guān)的一些概念:

平衡 vs. 非平衡:平衡二叉樹(shù)中,每個(gè)節(jié)點(diǎn)的左右子樹(shù)的深度相差至多為1(1或0)。

滿二叉樹(shù)(Full Binary Tree):除葉子節(jié)點(diǎn)以為的每個(gè)節(jié)點(diǎn)都有兩個(gè)孩子。

完美二叉樹(shù)(Perfect Binary Tree):是具有下列性質(zhì)的滿二叉樹(shù):所有的葉子節(jié)點(diǎn)都有相同的深度或處在同一層次,且每個(gè)父節(jié)點(diǎn)都必須有兩個(gè)孩子。

完全二叉樹(shù)(Complete Binary Tree):二叉樹(shù)中,可能除了最后一個(gè),每一層都被完全填滿,且所有節(jié)點(diǎn)都必須盡可能想左靠。

譯者注:完美二叉樹(shù)也隱約稱為完全二叉樹(shù)。完美二叉樹(shù)的一個(gè)例子是一個(gè)人在給定深度的祖先圖,因?yàn)槊總€(gè)人都一定有兩個(gè)生父母。完全二叉樹(shù)可以看成是可以有若干額外向左靠的葉子節(jié)點(diǎn)的完美二叉樹(shù)。疑問(wèn):完美二叉樹(shù)和滿二叉樹(shù)的區(qū)別?

4. 圖

圖相關(guān)的問(wèn)題主要集中在深度優(yōu)先搜索(depth first search)和廣度優(yōu)先搜索(breath first search)。

下面是一個(gè)簡(jiǎn)單的圖廣度優(yōu)先搜索的實(shí)現(xiàn)。

1) 定義GraphNode

classGraphNode{

intval;

GraphNodenext;

GraphNode[]neighbors;

booleanvisited;

GraphNode(intx){

val=x;

}

GraphNode(intx,GraphNode[]n){

val=x;

neighbors=n;

}

publicStringtoString(){

return"value: "+this.val;

}

}

2) 定義一個(gè)隊(duì)列Queue

classQueue{

GraphNodefirst,last;

publicvoidenqueue(GraphNoden){

if(first==null){

first=n;

last=first;

}else{

last.next=n;

last=n;

}

}

publicGraphNode dequeue(){

if(first==null){

returnnull;

}else{

GraphNodetemp=newGraphNode(first.val,first.neighbors);

first=first.next;

returntemp;

}

}

}

3) 用隊(duì)列Queue實(shí)現(xiàn)廣度優(yōu)先搜索

publicclassGraphTest{

publicstaticvoidmain(String[]args){

GraphNoden1=newGraphNode(1);

GraphNoden2=newGraphNode(2);

GraphNoden3=newGraphNode(3);

GraphNoden4=newGraphNode(4);

GraphNoden5=newGraphNode(5);

n1.neighbors=newGraphNode[]{n2,n3,n5};

n2.neighbors=newGraphNode[]{n1,n4};

n3.neighbors=newGraphNode[]{n1,n4,n5};

n4.neighbors=newGraphNode[]{n2,n3,n5};

n5.neighbors=newGraphNode[]{n1,n3,n4};

breathFirstSearch(n1,5);

}

publicstaticvoidbreathFirstSearch(GraphNoderoot,intx){

if(root.val==x)

System.out.println("find in root");

Queuequeue=newQueue();

root.visited=true;

queue.enqueue(root);

while(queue.first!=null){

GraphNodec=(GraphNode)queue.dequeue();

for(GraphNoden:c.neighbors){

if(!n.visited){

System.out.print(n+" ");

n.visited=true;

if(n.val==x)

System.out.println("Find "+n);

queue.enqueue(n);

}

}

}

}

}

5. 排序

下面是不同排序算法的時(shí)間復(fù)雜度,你可以去wiki看一下這些算法的基本思想。

6. 遞歸 vs. 迭代

對(duì)程序員來(lái)說(shuō),遞歸應(yīng)該是一個(gè)與生俱來(lái)的思想(a built-in thought),可以通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明。

問(wèn)題: 有n步臺(tái)階,一次只能上1步或2步,共有多少種走法。

步驟1:找到走完前n步臺(tái)階和前n-1步臺(tái)階之間的關(guān)系。

為了走完n步臺(tái)階,只有兩種方法:從n-1步臺(tái)階爬1步走到或從n-2步臺(tái)階處爬2步走到。如果f(n)是爬到第n步臺(tái)階的方法數(shù),那么f(n) = f(n-1) + f(n-2)。

f(0) = 0;f(1) = 1;

步驟2: 確保開(kāi)始條件是正確的。

publicstaticintf(intn){

if(n<=?2)returnn;

intx=f(n-1)+f(n-2);

returnx;

}

遞歸方法的時(shí)間復(fù)雜度是n的指數(shù)級(jí),因?yàn)橛泻芏嗳哂嗟挠?jì)算,如下:

f(5)

f(4) + f(3)

f(3) + f(2) + f(2) + f(1)

f(2) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1)

f(1) + f(0) + f(1) + f(1) + f(0) + f(1) + f(0) + f(1)

直接的想法是將遞歸轉(zhuǎn)換為迭代:

publicstaticintf(intn){

if(n<=?2){

returnn;

}

intfirst=1,second=2;

intthird=0;

for(inti=3;i<=?n;i++){

third=first+second;

first=second;

second=third;

}

returnthird;

}

7. 動(dòng)態(tài)規(guī)劃

動(dòng)態(tài)規(guī)劃是解決下面這些性質(zhì)類問(wèn)題的技術(shù):

一個(gè)問(wèn)題可以通過(guò)更小子問(wèn)題的解決方法來(lái)解決(譯者注:即問(wèn)題的最優(yōu)解包含了其子問(wèn)題的最優(yōu)解,也就是最優(yōu)子結(jié)構(gòu)性質(zhì))。

有些子問(wèn)題的解可能需要計(jì)算多次(譯者注:也就是子問(wèn)題重疊性質(zhì))。

子問(wèn)題的解存儲(chǔ)在一張表格里,這樣每個(gè)子問(wèn)題只用計(jì)算一次。

需要額外的空間以節(jié)省時(shí)間。

爬臺(tái)階問(wèn)題完全符合上面的四條性質(zhì),因此可以用動(dòng)態(tài)規(guī)劃法來(lái)解決。

publicstaticint[]A=newint[100];

publicstaticintf3(intn){

if(n<=?2)

A[n]=n;

if(A[n]>0)

returnA[n];

else

A[n]=f3(n-1)+f3(n-2);//store results so only calculate once!

returnA[n];

}

8. 位操作

位操作符:

亦或 左移 右移
1|0=1 1&0=0 1^0=1 0010<<2=1000 1100>>2=0011 ~1=0

獲得給定數(shù)字n的第i位:( i 從 0 計(jì)數(shù),并從右邊開(kāi)始)

publicstaticbooleangetBit(intnum,inti){

intresult=num&(1<

if(result==0){

returnfalse;

}else{

returntrue;

}

例如,獲得數(shù)字10的第2位:

i=1, n=101<<1= 101010&10=1010 is not 0, so return true;

9. 概率問(wèn)題

解決概率相關(guān)的問(wèn)題通常需要很好的規(guī)劃了解問(wèn)題(formatting the problem),這里剛好有一個(gè)這類問(wèn)題的簡(jiǎn)單例子:

一個(gè)房間里有50個(gè)人,那么至少有兩個(gè)人生日相同的概率是多少?(忽略閏年的事實(shí),也就是一年365天)

計(jì)算某些事情的概率很多時(shí)候都可以轉(zhuǎn)換成先計(jì)算其相對(duì)面。在這個(gè)例子里,我們可以計(jì)算所有人生日都互不相同的概率,也就是:365/365 * 364/365 * 363/365 * ... * (365-49)/365,這樣至少兩個(gè)人生日相同的概率就是1 – 這個(gè)值。

publicstaticdoublecaculateProbability(intn){

doublex=1;

for(inti=0;i

x*=(365.0-i)/365.0;

}

doublepro=Math.round((1-x)*100);

returnpro/100;

}

calculateProbability(50) = 0.97

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4775

    瀏覽量

    97620
  • 編程
    +關(guān)注

    關(guān)注

    90

    文章

    3710

    瀏覽量

    96983

原文標(biāo)題:經(jīng)典:編程面試的 10 大算法概念匯總

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)在釘釘和企業(yè)微信上使用AI視頻面試——AI得賢招聘官操作說(shuō)明

    面試): 計(jì)算機(jī)編程能力評(píng)估考試: 在線認(rèn)知能力測(cè)試: 在線背景調(diào)查: AI得賢招聘官基于篇章級(jí)的語(yǔ)義識(shí)別算法對(duì)候選人面試回答進(jìn)行語(yǔ)義分析,并通過(guò)計(jì)算機(jī)視覺(jué)和聲音
    發(fā)表于 03-07 19:30

    史上最全面Java面試匯總(面試題+答案)精選資料分享

    JAVA面試精選【Java基礎(chǔ)第一部分】JAVA面試精選【Java基礎(chǔ)第二部分】JAVA面試精選【Java基礎(chǔ)第三部分】JAVA面試精選【Java
    發(fā)表于 07-21 09:39

    編程之美--微軟技術(shù)面試心得

    編程之美--微軟技術(shù)面試心得本書(shū)收集了約60道算法和程序設(shè)計(jì)題目,這些題目大部分在近年的筆試,面試中出現(xiàn)過(guò),或者是被微軟員工熱烈討論過(guò)。作者試圖從書(shū)中各種有趣的問(wèn)
    發(fā)表于 10-23 16:02 ?75次下載
    <b class='flag-5'>編程</b>之美--微軟技術(shù)<b class='flag-5'>面試</b>心得

    C/C++程序員面試寶典

    面試C或C++的必備用書(shū),詳細(xì)講了面試和筆試中常遇到的編程細(xì)節(jié)問(wèn)題,對(duì)找工作很有幫助
    發(fā)表于 11-03 10:43 ?0次下載

    一份過(guò)冬存糧:算法工程師必備的面試技能雷達(dá)圖

    當(dāng)然,上面只是讓大家體會(huì)一下什么是這四項(xiàng)素質(zhì),真實(shí)的計(jì)算廣告算法工程師面試中,你不一定要都掌握,也不一定局限于這些內(nèi)容。如果你遇到一位資深的面試官,他不會(huì)預(yù)設(shè)一個(gè)框架往面試者身上套,而
    的頭像 發(fā)表于 01-14 09:13 ?2589次閱讀

    如何準(zhǔn)備算法工程師的面試需要知道哪些知識(shí)技能

    今天我們不聊paper,換一個(gè)輕松一點(diǎn)的話題,聊一聊如何準(zhǔn)備算法工程師的面試。所以希望自己的經(jīng)驗(yàn)?zāi)軐?duì)你有所幫助,也非常歡迎其他面試官能夠多留言探討自己的面試經(jīng)驗(yàn)。
    的頭像 發(fā)表于 02-03 09:15 ?6072次閱讀

    一位算法工程師的筆試及面試總結(jié)

    解決業(yè)務(wù)問(wèn)題。整個(gè)求職過(guò)程是一個(gè)和互聯(lián)網(wǎng)企業(yè)雙向了解,接收面試反饋后不斷思考、調(diào)整職業(yè)規(guī)劃與重復(fù)完善知識(shí)體系的過(guò)程,本文通過(guò)介紹我個(gè)人的求職過(guò)程,向后來(lái)者揭示國(guó)內(nèi)互聯(lián)網(wǎng)企業(yè)對(duì)算法&機(jī)器學(xué)習(xí)崗的要求、面試過(guò)程、薪資狀況,也分享一些
    的頭像 發(fā)表于 02-15 11:47 ?1.2w次閱讀

    深信服面算法工程師面試經(jīng)歷

    深信服面的算法工程師,深信服的面試很專業(yè),不愧是重技術(shù)的公司,經(jīng)歷了三面,雖然掛了難免失落,但是還是很慶幸有這次的經(jīng)歷。掛的原因是自己沒(méi)有準(zhǔn)備充分,完全是去裸面的。感覺(jué)自己掛在了二面,二面面試官人很好,想是給個(gè)三面的機(jī)會(huì)吧,特別
    的頭像 發(fā)表于 03-22 14:38 ?4362次閱讀

    算法工程師的面試真的是一門玄學(xué)嗎

    經(jīng)常參加面試的同學(xué)肯定有過(guò)這種感覺(jué),即使面試過(guò)程非常順暢,即使你本身是一個(gè)面霸,甚至god like,也經(jīng)常有失手的時(shí)候。所以很多同學(xué)把面試歸結(jié)為一門“玄學(xué)”。那么算法工程師的
    的頭像 發(fā)表于 07-29 17:29 ?2649次閱讀

    編程面試最常見(jiàn)的14種模式

    這里我將列出最常見(jiàn)的 14 種模式,它們可被用于解決任何編程面試問(wèn)題。另外我還會(huì)說(shuō)明如何識(shí)別每種模式,并會(huì)為每種模式提供一些問(wèn)題示例。
    的頭像 發(fā)表于 08-01 11:24 ?3763次閱讀

    算法工程師面試是一門玄學(xué)嗎

    但經(jīng)常參加面試的同學(xué)肯定有過(guò)這種感覺(jué),即使面試過(guò)程非常順暢,即使你本身是一個(gè)面霸,甚至god like,也經(jīng)常有失手的時(shí)候。所以很多同學(xué)把面試歸結(jié)為一門“玄學(xué)”。那么算法工程師的
    的頭像 發(fā)表于 08-16 16:40 ?2501次閱讀

    編程面試9大技巧

    它縮小了問(wèn)題的范圍。例如,也許你會(huì)問(wèn)面試官,“這個(gè)數(shù)組中的所有整數(shù)都是正的嗎?”。如果答案是肯定的,那么你就不必考慮整個(gè)負(fù)整數(shù)空間,這可能使問(wèn)題更容易解決。
    的頭像 發(fā)表于 12-09 15:34 ?3046次閱讀

    10個(gè)經(jīng)典C語(yǔ)言面試基礎(chǔ)算法及代碼

    10個(gè)經(jīng)典的C語(yǔ)言面試基礎(chǔ)算法及代碼
    的頭像 發(fā)表于 01-16 11:09 ?3660次閱讀

    什么是算法編程?最常用的算法有哪些

    編程算法是什么意思?相信問(wèn)這個(gè)問(wèn)題的同學(xué)一定是個(gè)零基礎(chǔ)剛剛?cè)腴T編程的小白,針對(duì)這個(gè)問(wèn)題,本文將介紹編程算法的基本
    的頭像 發(fā)表于 07-26 11:11 ?9861次閱讀

    Linux應(yīng)用編程的基本概念

    Linux應(yīng)用編程涉及到在Linux環(huán)境下開(kāi)發(fā)和運(yùn)行應(yīng)用程序的一系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念。
    的頭像 發(fā)表于 10-24 17:19 ?1119次閱讀