數組是最常用的基礎數據結構,它將元素保存在連續的內存中。它也是面試最喜歡的問題之一,在代碼面試中你會經常聽到很多關於數組的問題,例如,數組的反轉、數組的排序或者查找數組中的一個元素。
數組結構的一個關鍵優點是在知道索引的情況能夠以O(1)的複雜度找到一個元素。但是增加或者刪除一個元素是很慢的,因為一旦創建了一個數組,你就不能改變它的大小了。
為了創建一個更長或者更短的數組,你需要創建一個新的數組,然後將所有元素從舊數組中複製到新數組中。
解決數組問題的關鍵是,你要對數組這種數據結構有一個深刻的認識,同時還要了解基本的程序流程如循環、遞歸以及基本的操作符。
下面是一些經常問到和數組相關的面試題,你可以拿來練習:
1、在一個給定的從1到100的整型數組中,如何快速找到缺失的數字?
2、如何找到一個給定的整型數組中的重複數字?
3、在一個未排序的整型數組中,如何找到最大和最小的數字?
4、在一個整型數組中,如何找到一個所有成對的數字,滿足它們的和等於一個給定的數字?
5、如果一個數組包含多個重複元素,如何找到這些重複的數字?
6、用Java實現從一個給定數組中刪除重複元素?
7、如何利用快速排序對一個整型數組進行排序?
8、如何從一個數組中刪除重複元素?
9、用Java實現數組反轉?
10、如何不藉助庫實現從數組中刪除重複元素?
鍊表問題
鍊表是另外一個常見的數據結構,對數組結構是一個補充。和數組類似,它也是一個線性的數據結構,以線性方式存儲元素。
不過和數組不同的是,鍊表的元素不是存儲在連續位置中,而是分散在各個內存中的各個位置,通過節點連結起來。一個鍊表就是一個包含了下個節點內存地址的節點列表。
基於這種結構,可以很容易實現鍊表中元素的添加和刪除,因為只需要改變節點的指向而無需創建一個新的數組。不過鍊表中的查找是相對困難的,在一個單向鍊表中需要花費O(n)的時間代價來查找一個元素。
鍊表有幾種不同的形式。首先是單向鍊表,在這個結構你只能向一個方向遍歷(向前或者反轉);其次是雙向鍊表,你可以雙向遍歷(向前或者向後);最後是環形鍊表,組成一個環的形式。
要解決鍊表問題,你就必須了解遞歸的相關知識,因為鍊表是一種遞歸的數據結構。如果你從鍊表中去掉一個節點,剩下的數據結構仍然是鍊表,因此,許多鍊表問題有比遍歷更簡單的遞歸解決方案.
下面是一些最常見和流行的鍊表面試問題
1、在一次遍歷中,怎樣發現單個鍊表的中間元素?
2、怎樣驗證給定的鍊表是環形的?怎樣發現這個環的起始節點?
3、怎樣翻轉鍊表?
4、不使用遞歸,怎樣反轉單個鍊表?
5、在未排序鍊表中,怎樣移除重複的節點?
6、怎樣找出單個鍊表的長度?
7、從單個鍊表的結尾處,怎樣找出鍊表的第三個節點?
8、怎樣使用棧計算兩個鍊表的和?
字符串相關問題
與數組和鍊表數據結構一起,字符串是編程工作面試中的另一個熱門話題。我從未參加過沒有問過基於字符串相關問題的編碼面試。
字符串的一個優勢在於,如果你了解數組,你可以很容易地解決基於字符串的問題,因為字符串僅僅是一個字符數組。
因此,在解決基於數組的編程問題中所學到的所有技術也可用於解決字符串編程問題。
以下是編程求職面試中常見的字符串編程問題:
1、如何輸出字符串中的重複字符?
2、如何判斷兩個字符串是否互為回文?
3、如何從字符串中輸出第一個不重複字符?
4、如何使用遞歸實現字符串反轉?
5、如何檢查字符僅包含數字字符?
6、如何在字符串中找到重複字符?
7、如何對給定字符串中的元音及輔音進行計數?
8、如何計算給定字符傳中特定字符出現的次數?
9、如何找到一個字符串的全排列?
10、在不使用任何庫方法的情況下如何反轉給定語句中的單詞?
11、如何判斷兩個字符串是否互為旋轉?
12、如何判斷給定字符串是否是回文?
以上就動力節點Java培訓機構小編介紹的「數據結構java面試題及答案」的內容,希望對大家有幫助,關注動力節點,想了解更多Java技術知識或視頻資源留言給小編。