1.數(shù)組面試問題
數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),它將元素存儲在連續(xù)的內(nèi)存位置。這也是采訪者的一個主要話題,你會在任何編碼訪談中聽到很多關(guān)于數(shù)組的問題,例如反轉(zhuǎn)數(shù)組,排序數(shù)組或搜索數(shù)組中的元素。
- 如何在給定的1到100的整數(shù)數(shù)組中找到缺失的數(shù)字?
- 如何在給定的整數(shù)數(shù)組上找到重復(fù)的數(shù)字?
- 如何在未排序的整數(shù)數(shù)組中找到最大和最小的數(shù)字?
- 你如何找到所有對的整數(shù)數(shù)組,其總和等于給定的數(shù)字?
- 如果數(shù)組包含多個重復(fù)項,如何在數(shù)組中找到重復(fù)的數(shù)字?
- 如何從Java中的給定數(shù)組中刪除重復(fù)項?
- 如何使用快速排序算法對整數(shù)數(shù)組進(jìn)行排序?
- 如何從陣列中刪除重復(fù)項?
- 你如何在Java中反轉(zhuǎn)數(shù)組?
- 如何在不使用任何庫的情況下從數(shù)組中刪除重復(fù)項?
2.鏈表面試問題
鏈表是節(jié)點(diǎn)列表,其中每個節(jié)點(diǎn)包含存儲的值和下一個節(jié)點(diǎn)的地址。
由于這種結(jié)構(gòu),在鏈表中添加和刪除元素很容易,因?yàn)槟恍枰逆溄佣皇莿?chuàng)建數(shù)組,但搜索很困難,并且通常需要花費(fèi)O(n)時間來查找元素。單鏈表。
它還有各種類似鏈表,可以讓你在一個方向上移動(向前或向后); 雙向鏈表,允許您雙向移動(向前和向后); 最后,圓形鏈表,形成一個圓圈。
為了解決基于鏈表的問題,良好的遞歸知識很重要,因?yàn)殒湵硎沁f歸數(shù)據(jù)結(jié)構(gòu)。
如果從鏈接列表中獲取一個節(jié)點(diǎn),則剩余的數(shù)據(jù)結(jié)構(gòu)仍然是鏈接列表,因此,許多鏈接列表問題具有比迭代解決方案更簡單的遞歸解決方案。
- 如何在一次通過中找到單鏈表的中間元素?
- 如何檢查給定鏈表是否包含循環(huán)?你如何找到循環(huán)的起始節(jié)點(diǎn)?
- 你如何扭轉(zhuǎn)鏈表?
- 如何在沒有遞歸的情況下反轉(zhuǎn)單鏈表?
- 如何在未排序的鏈表中刪除重復(fù)節(jié)點(diǎn)?
- 你如何找到單鏈表的長度?
- 如何在單鏈表中找到最后的第三個節(jié)點(diǎn)?
- 如何使用Stack找到兩個鏈表的總和?
3.字符串面試問題
與數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)一起,字符串是編程工作訪談的另一個熱門話題。
字符串的一個好處是,如果你知道數(shù)組,你可以很容易地解決基于字符串的問題,因?yàn)樽址皇且粋€字符數(shù)組。因此,通過求解基于數(shù)組的編碼問題所學(xué)到的所有技術(shù)也可用于解決字符串編程問題。
- 如何從字符串中打印重復(fù)的字符?
- 你如何檢查兩個字符串是否是彼此的字謎?
- 如何從字符串中打印第一個不重復(fù)的字符?
- 如何使用遞歸來反轉(zhuǎn)給定的字符串?
- 如何檢查字符串是否只包含數(shù)字?
- 如何在字符串中找到重復(fù)的字符?
- 你如何計算給定字符串中的元音和輔音?
- 如何計算字符串中給定字符的出現(xiàn)次數(shù)?
- 你如何找到字符串的所有排列?
- 如何在不使用任何庫方法的情況下反轉(zhuǎn)給定句子中的單詞?
- 你如何檢查兩個字符串是否相互旋轉(zhuǎn)?
- 你如何檢查給定的字符串是否是回文?
4.二叉樹面試問題
到目前為止,我們只研究了線性數(shù)據(jù)結(jié)構(gòu),但現(xiàn)實(shí)世界中的所有信息都無法以線性方式表示,而這正是樹數(shù)據(jù)結(jié)構(gòu)所幫助的地方。
樹數(shù)據(jù)結(jié)構(gòu)是一種數(shù)據(jù)結(jié)構(gòu),允許您以分層方式存儲數(shù)據(jù)。根據(jù)您存儲數(shù)據(jù)的方式,有不同類型的樹,例如二叉樹,其中每個節(jié)點(diǎn)最多具有兩個子節(jié)點(diǎn)。
除了它的近親 二叉搜索樹,它也是最流行的樹數(shù)據(jù)結(jié)構(gòu)之一。因此,您會發(fā)現(xiàn)很多基于它們的問題,例如如何遍歷它們,計算節(jié)點(diǎn),查找深度,以及檢查它們是否平衡。
解決二叉樹問題的一個關(guān)鍵點(diǎn)是對理論的強(qiáng)烈了解,例如二叉樹的大小或深度,葉子是什么,節(jié)點(diǎn)是什么,以及對流行的遍歷算法的理解,例如前,后和有序遍歷。
- 如何實(shí)現(xiàn)二叉搜索樹?
- 如何在給定的二叉樹中執(zhí)行前序遍歷?
- 如何在沒有遞歸的情況下按預(yù)先遍歷給定的二叉樹?
- 如何在給定的二叉樹中執(zhí)行有序遍歷?
- 如何在沒有遞歸的情況下使用inorder遍歷打印給定二叉樹的所有節(jié)點(diǎn)?
- 你如何實(shí)現(xiàn)一個后序遍歷算法?
- 如何在沒有遞歸的情況下遍歷后序遍歷中的二叉樹?
- 如何打印二叉搜索樹的所有葉子?
- 如何計算給定二叉樹中的多個葉節(jié)點(diǎn)?
- 如何在給定數(shù)組中執(zhí)行二進(jìn)制搜索?
5.其他面試問題
除了基于數(shù)據(jù)結(jié)構(gòu)的問題之外,大多數(shù)編程工作訪談還會詢問算法,設(shè)計,位操作和基于邏輯的一般問題,我將在本節(jié)中對其進(jìn)行描述。
練習(xí)這些概念很重要,因?yàn)橛袝r在實(shí)際的面試中解決這些概念很棘手。
- 如何實(shí)現(xiàn)冒泡排序算法?
- 如何實(shí)現(xiàn)迭代快速排序算法?
- 你如何實(shí)現(xiàn)插入排序算法?
- 如何實(shí)現(xiàn)合并排序算法?
- 如何實(shí)現(xiàn)桶排序算法?
- 你如何實(shí)現(xiàn)計數(shù)排序算法?
- 如何實(shí)現(xiàn)基數(shù)排序算法?
- 如何在不使用第三個變量的情況下交換兩個數(shù)字?
- 如何檢查兩個矩形是否相互重疊?
- 你如何設(shè)計自動售貨機(jī)?