數據結構java面試題及答案

2020-11-23 騰訊網

數組是最常用的基礎數據結構,它將元素保存在連續的內存中。它也是面試最喜歡的問題之一,在代碼面試中你會經常聽到很多關於數組的問題,例如,數組的反轉、數組的排序或者查找數組中的一個元素。

數組結構的一個關鍵優點是在知道索引的情況能夠以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技術知識或視頻資源留言給小編。

相關焦點

  • Java程式設計師集合框架面試題
    2、 什麼是Iterator一些集合類提供了內容遍歷的功能,通過java.util.Iterator接口。這些接口允許遍歷對象的集合。依次操作每個元素對象。對比Hashtable VS HashMap兩者都是用key-value方式獲取數據。Hashtable是原始集合類之一(也稱作遺留類)。HashMap作為新集合框架的一部分在Java2的1.2版本中加入。
  • Java基礎學習:java中的基本數據類型
    二、案例用法 1、類型轉換 自動轉換:範圍小的數據類型可以自動轉換成範圍大的數據類型 強制轉換:把一種數據類型轉換為另外一種數據類型。 類型提升:表達式運算中有不同的數據類型,類型會自動向範圍大的提升。
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    虛擬機把描述類的數據從 Class 文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的 Java 類型,這就是虛擬機的類加載機制。 將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構。
  • java第三章循環結構和random知識點總結
    示例代碼:public class ForTest02 {public static void main(String[] args) {//求和的最終結果必須保存起來,需要定義一個變量,用於保存求和的結果,初始值為0int sum = 0;//從1開始到5結束的數據,使用循環結構完成for(int i
  • Java 編程技巧之數據結構
    筆者從數據結構的角度,整理了一些 Java 編程技巧,以供大家學習參考。使用HashSet判斷主鍵是否存在HashSet 實現 Set 接口,由哈希表(實際上是 HashMap )實現,但不保證 set 的迭代順序,並允許使用 null 元素。
  • 學java可以做什麼?大數據前景和就業方向又是什麼樣的呢?
    學java可以做什麼?(1) Java可以用來做網站:很多大型網站都是用JSP寫的,JSP全名java server pages,這是一種動態網頁技術,比如我們熟悉的B站,很多政府網站都是用這個寫的所以想學習java的同學還可以負責網站方面的製作,這方面的崗位也比較多。
  • Java transient關鍵字使用小記
    示例code如下:import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream
  • JAVA必須掌握的數據結構和算法
    常見的數據結構鍊表LinkedHashSet LinkedList 底層數據結構由鍊表和哈希表組成。數據的添加和刪除都較為方便,就是訪問比較耗費時間。數組ArrayList 訪問數據十分簡單,而添加和刪除數據比較耗工夫堆堆是一種圖的樹形結構,被用於實現「優先隊列",優先隊列是一種數據結構,可以自由添加數據,但取出數據時要從最小值開始按順序取出
  • 超全,110+數據挖掘面試題整理(附答案)
    4.根據要求寫出SQL表A結構如下:Member_ID(用戶的ID,字符型)Log_time(用戶訪問頁面時間,日期型(只有一天的數據))URL(訪問的頁面地址,字符型)數據倉庫隨時間的變化不斷增加新的數據內容 B. 捕捉到的新數據會覆蓋原來的快照 C. 數據倉庫隨事件變化不斷刪去舊的數據內容 D. 數據倉庫中包含大量的綜合數據,這些綜合數據會隨著時間的變化不斷地進行重新綜合27.關於基本數據的元數據是指: (D) A. 基本元數據與數據源,數據倉庫,數據集市和應用程式等結構相關的信息; B.
  • 跟我學java編程—認識java語言的字符類型
    前面兩個小節討論了用於存儲數值的數據類型。另外還經常會遇到需要存儲並操縱字符型數據的情況。例如:計算數值表達式時,需要存儲運算符,這時需要一種可以存儲單個字符數據的數據類型。Java語言提供了一種char數據類型,可以滿足存儲單個字符的需要。
  • 跟我學java編程—認識java的整數類型
    Java語言中,基本的整型數據類型有byte、short、int、long四種類型,用於需要不同存儲空間的數據使用。整型有正整數和負整數之分,在Java語言中,規定整型的最高位為符號位,最高位為「0」表示正數,最高位為「1」表示負數,其它位表示數值。因此整型類型的數據能夠表示的最小值為:-2n-1 —2n-1-1(n為該類型所佔存儲空間的二進位位數)。
  • 尚學堂知識整理:Java double數據類型
    double數據類型使用64位來存儲浮點數。double值也稱為雙精度浮點數。它可以表示一個最小為4.9 x 10^-324,最大為1.7 x 10^308的數字。它可以是正的或負的。所有實數被稱為double字面量。
  • Java基礎教程:常見數據結構簡介
    數據結構介紹數據結構 : 數據用什麼樣的方式組合在一起。常見數據結構數據存儲的常用結構有:棧、隊列、數組、鍊表和紅黑樹。我們分別來了解一下:棧棧:stack,又稱堆棧,它是運算受限的線性表,其限制是僅允許在標的一端進行插入和刪除操作,不允許在其他任何位置進行添加、查找、刪除等操作。
  • Java數據結構的線性結構和非線性結構,這篇足夠了
    數據結構與算法,可以說是程式設計師的靈魂。大家在找工作面試的時候,尤其是大網際網路公司面試的時候,數據結構與算法必問,想要學好數據結構,首先你要高效而愉快地學習,作為優秀的程式設計師它可以在海量數據計算的時候,依然保持高速地計算。
  • Java學習必不可少的十大網站
    這是我為學習java的同學們準備的網站集合。這些網站提供新聞,常見問題或訪談問題的答案,精彩的講座等。質量是好的網站的關鍵因素。我認為它們都具有最高的質量。在下文中,我還將分享如何使用這些網站進行學習或娛樂。1.
  • 360、騰訊、迅雷Windows編程面試題及答案
    CView為視圖類,用於顯示數據的空白區域窗口。  CDocument為文檔類。  MFC提供了文檔/視類結構,採用數據本身和顯示分離的機制。其中文檔類CDocument用於數據的存儲和加載,視類CView用於數據的顯示與修改。  2.
  • Java基礎教程:java反射機制教程
    這時候java語言在設計的時候為我們提供了一個機制,就是反射機制,他能夠很方便的去解決我們的問題。 二、深入分析java反射機制 1、獲取Class類 在java中萬事萬物皆對象,Useruser=newUser()一行代碼我們知道了user是User類的實例對象,通過Studentstu=newStudent()我們知道了
  • 為什麼java中序列化的serialVersionUID總是無意義的?
    這個題目不主要講serialVersionUID作用,而是講後面的那一串數字的意義,當然也會對java的這個serialVersionUID的作用進行一個講解。這篇文章是我積壓了很久的一篇文章,寫了一半,幾個月了才發現,於是拿出來好好整理一下。
  • java基礎教程:Collection集合,Collection 常用API
    集合:集合是java中提供的一種容器,可以用來存儲多個數據。集合和數組既然都是容器,它們有什麼區別呢?數組的長度是固定的。集合的長度是可變的。數組中存儲的是同一類型的元素,可以存儲任意類型數據。集合存儲的都是引用數據類型。如果想存儲基本類型數據需要存儲對應的包裝類型。
  • 跟我學java編程—Java邏輯運算符
    示例1:邏輯運算符在D盤Java目錄下,新建「LogicSample.java」文件。用記事本打開「LogicSample.java」文件,輸入以下代碼:代碼結構分析程序功能主要是演示邏輯運算符的用法。類似語句「bJudge = !