色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

編程面試的 9 大算法概念

Linux愛好者 ? 來源:未知 ? 作者:鄧佳佳 ? 2018-03-20 14:19 ? 次閱讀

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

1. 字符串

2. 鏈表

3. 樹

4. 圖

5. 排序

6. 遞歸 vs. 迭代

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

8. 位操作

9. 概率問題

1. 字符串

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

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

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

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

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

length()// 字符串長度

length// 數(shù)組大小

2. 鏈表

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

classNode{

intval;

Nodenext;

Node(intx){

val=x;

next=null;

}

}

鏈表兩個著名的應(yīng)用是棧Stack和隊列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;

}

}

}

隊列:

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. 樹

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

classTreeNode{

intvalue;

TreeNodeleft;

TreeNoderight;

}

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

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

滿二叉樹(Full Binary Tree):除葉子節(jié)點以為的每個節(jié)點都有兩個孩子。

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

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

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

4. 圖

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

下面是一個簡單的圖廣度優(yōu)先搜索的實現(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) 定義一個隊列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) 用隊列Queue實現(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. 排序

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

6. 遞歸 vs. 迭代

程序員來說,遞歸應(yīng)該是一個與生俱來的思想(a built-in thought),可以通過一個簡單的例子來說明。

問題: 有n步臺階,一次只能上1步或2步,共有多少種走法。

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

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

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

步驟2: 確保開始條件是正確的。

publicstaticintf(intn){

if(n<=?2)returnn;

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

returnx;

}

遞歸方法的時間復(fù)雜度是n的指數(shù)級,因為有很多冗余的計算,如下:

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. 動態(tài)規(guī)劃

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

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

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

子問題的解存儲在一張表格里,這樣每個子問題只用計算一次。

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

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

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 計數(shù),并從右邊開始)

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. 概率問題

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

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

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

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

    關(guān)注

    23

    文章

    4657

    瀏覽量

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

    關(guān)注

    88

    文章

    3658

    瀏覽量

    94444

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

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

收藏 0人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    編程面試最常見的14種模式

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

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

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

    編程面試9大技巧

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

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

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

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

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

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

    Linux應(yīng)用編程涉及到在Linux環(huán)境下開發(fā)和運行應(yīng)用程序的一系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念。
    的頭像 發(fā)表于 10-24 17:19 ?417次閱讀
    主站蜘蛛池模板: 九九色精品国偷自产视频 | 亚洲免费精品视频 | 台湾佬综合娱乐网 | 毛片免费观看 | 久久精品无码成人国产毛 | 国产最猛性XXXX69交 | 精品国产乱码久久久久久软件 | 欧美白人极品性喷潮 | 美女图片131亚洲午夜 | 丰满饥渴老太性hd | 久久WWW免费人成一看片 | 日韩 国产 中文 无码 | 国产人妻人伦精品久久无码 | 亚洲高清免费在线观看 | 美女强奷到抽搐在线播放 | 嫩草影院在线观看精品视频 | 97精品一区二区视频在线观看 | 涩涩伊人久久无码欧美 | 把腿张开再深点好爽宝贝动态图 | 果冻传媒在线观看高清完整免费 | 免费人成视频19674不收费 | 久久足恋网| 人禽l交视频在线播放 视频 | 果冻传媒2021精品在线观看 | 欧美四虎精品二区免费 | 精品亚洲一区二区三区在线播放 | 成人在线视频播放 | 亚洲AV久久婷婷蜜臀无码不卡 | 蜜桃传媒一区二区亚洲AV | 快播成电影人网址 | 日日撸影院在线 | 手机在线免费看毛片 | 同桌上课把奶露出来给我玩 | 99re8热视频这在线视频 | 蜜桃传媒在线观看 | 99RE8国产这里只有精品 | av淘宝 在线观看 | 狠狠人妻久久久久久综合九色 | 米奇在线8888在线精品视频 | 不良网站进入窗口软件下载免费 | 国产精品久久久久久久A片冻果 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品