更新時(shí)間:2020-03-06 10:58:46 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽3755次
數(shù)組是最常用的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),它將元素保存在連續(xù)的內(nèi)存中。它也是面試最喜歡的問(wèn)題之一,在代碼面試中你會(huì)經(jīng)常聽到很多關(guān)于數(shù)組的問(wèn)題,例如,數(shù)組的反轉(zhuǎn)、數(shù)組的排序或者查找數(shù)組中的一個(gè)元素。
數(shù)組結(jié)構(gòu)的一個(gè)關(guān)鍵優(yōu)點(diǎn)是在知道索引的情況能夠以O(shè)(1)的復(fù)雜度找到一個(gè)元素。但是增加或者刪除一個(gè)元素是很慢的,因?yàn)橐坏﹦?chuàng)建了一個(gè)數(shù)組,你就不能改變它的大小了。
為了創(chuàng)建一個(gè)更長(zhǎng)或者更短的數(shù)組,你需要?jiǎng)?chuàng)建一個(gè)新的數(shù)組,然后將所有元素從舊數(shù)組中復(fù)制到新數(shù)組中。
解決數(shù)組問(wèn)題的關(guān)鍵是,你要對(duì)數(shù)組這種數(shù)據(jù)結(jié)構(gòu)有一個(gè)深刻的認(rèn)識(shí),同時(shí)還要了解基本的程序流程如循環(huán)、遞歸以及基本的操作符。
下面是一些經(jīng)常問(wèn)到和數(shù)組相關(guān)的面試題,你可以拿來(lái)練習(xí):
1、在一個(gè)給定的從1到100的整型數(shù)組中,如何快速找到缺失的數(shù)字?
2、如何找到一個(gè)給定的整型數(shù)組中的重復(fù)數(shù)字?
3、在一個(gè)未排序的整型數(shù)組中,如何找到最大和最小的數(shù)字?
4、在一個(gè)整型數(shù)組中,如何找到一個(gè)所有成對(duì)的數(shù)字,滿足它們的和等于一個(gè)給定的數(shù)字?
5、如果一個(gè)數(shù)組包含多個(gè)重復(fù)元素,如何找到這些重復(fù)的數(shù)字?
6、用Java實(shí)現(xiàn)從一個(gè)給定數(shù)組中刪除重復(fù)元素?
7、如何利用快速排序?qū)σ粋€(gè)整型數(shù)組進(jìn)行排序?
8、如何從一個(gè)數(shù)組中刪除重復(fù)元素?
9、用Java實(shí)現(xiàn)數(shù)組反轉(zhuǎn)?
10、如何不借助庫(kù)實(shí)現(xiàn)從數(shù)組中刪除重復(fù)元素?
鏈表問(wèn)題
鏈表是另外一個(gè)常見的數(shù)據(jù)結(jié)構(gòu),對(duì)數(shù)組結(jié)構(gòu)是一個(gè)補(bǔ)充。和數(shù)組類似,它也是一個(gè)線性的數(shù)據(jù)結(jié)構(gòu),以線性方式存儲(chǔ)元素。
不過(guò)和數(shù)組不同的是,鏈表的元素不是存儲(chǔ)在連續(xù)位置中,而是分散在各個(gè)內(nèi)存中的各個(gè)位置,通過(guò)節(jié)點(diǎn)鏈接起來(lái)。一個(gè)鏈表就是一個(gè)包含了下個(gè)節(jié)點(diǎn)內(nèi)存地址的節(jié)點(diǎn)列表。
基于這種結(jié)構(gòu),可以很容易實(shí)現(xiàn)鏈表中元素的添加和刪除,因?yàn)橹恍枰淖児?jié)點(diǎn)的指向而無(wú)需創(chuàng)建一個(gè)新的數(shù)組。不過(guò)鏈表中的查找是相對(duì)困難的,在一個(gè)單向鏈表中需要花費(fèi)O(n)的時(shí)間代價(jià)來(lái)查找一個(gè)元素。
鏈表有幾種不同的形式。首先是單向鏈表,在這個(gè)結(jié)構(gòu)你只能向一個(gè)方向遍歷(向前或者反轉(zhuǎn));其次是雙向鏈表,你可以雙向遍歷(向前或者向后);最后是環(huán)形鏈表,組成一個(gè)環(huán)的形式。
要解決鏈表問(wèn)題,你就必須了解遞歸的相關(guān)知識(shí),因?yàn)殒湵硎且环N遞歸的數(shù)據(jù)結(jié)構(gòu)。如果你從鏈表中去掉一個(gè)節(jié)點(diǎn),剩下的數(shù)據(jù)結(jié)構(gòu)仍然是鏈表,因此,許多鏈表問(wèn)題有比遍歷更簡(jiǎn)單的遞歸解決方案.
下面是一些最常見和流行的鏈表面試問(wèn)題
1、在一次遍歷中,怎樣發(fā)現(xiàn)單個(gè)鏈表的中間元素?
2、怎樣驗(yàn)證給定的鏈表是環(huán)形的?怎樣發(fā)現(xiàn)這個(gè)環(huán)的起始節(jié)點(diǎn)?
3、怎樣翻轉(zhuǎn)鏈表?
4、不使用遞歸,怎樣反轉(zhuǎn)單個(gè)鏈表?
5、在未排序鏈表中,怎樣移除重復(fù)的節(jié)點(diǎn)?
6、怎樣找出單個(gè)鏈表的長(zhǎng)度?
7、從單個(gè)鏈表的結(jié)尾處,怎樣找出鏈表的第三個(gè)節(jié)點(diǎn)?
8、怎樣使用棧計(jì)算兩個(gè)鏈表的和?
字符串相關(guān)問(wèn)題
與數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)一起,字符串是編程工作面試中的另一個(gè)熱門話題。我從未參加過(guò)沒有問(wèn)過(guò)基于字符串相關(guān)問(wèn)題的編碼面試。
字符串的一個(gè)優(yōu)勢(shì)在于,如果你了解數(shù)組,你可以很容易地解決基于字符串的問(wèn)題,因?yàn)樽址畠H僅是一個(gè)字符數(shù)組。
因此,在解決基于數(shù)組的編程問(wèn)題中所學(xué)到的所有技術(shù)也可用于解決字符串編程問(wèn)題。
以下是編程求職面試中常見的字符串編程問(wèn)題:
1、如何輸出字符串中的重復(fù)字符?
2、如何判斷兩個(gè)字符串是否互為回文?
3、如何從字符串中輸出第一個(gè)不重復(fù)字符?
4、如何使用遞歸實(shí)現(xiàn)字符串反轉(zhuǎn)?
5、如何檢查字符僅包含數(shù)字字符?
6、如何在字符串中找到重復(fù)字符?
7、如何對(duì)給定字符串中的元音及輔音進(jìn)行計(jì)數(shù)?
8、如何計(jì)算給定字符傳中特定字符出現(xiàn)的次數(shù)?
9、如何找到一個(gè)字符串的全排列?
10、在不使用任何庫(kù)方法的情況下如何反轉(zhuǎn)給定語(yǔ)句中的單詞?
11、如何判斷兩個(gè)字符串是否互為旋轉(zhuǎn)?
12、如何判斷給定字符串是否是回文?
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“數(shù)據(jù)結(jié)構(gòu)java面試題及答案”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743