1. 程式人生 > >【 劍指Offer 1 】數據結構

【 劍指Offer 1 】數據結構

value 隊列 數組名 出現 額外 offer 劍指offer 兩種 訪問

數據結構是技術面試中的重點,總結以下幾種常見的必須熟練掌握數據結構。

  1. 數組
  2. 字符串
  3. 鏈表
  4. 棧和隊列

數組和字符串是兩種最基本的數據結構,連續內存;

鏈表和樹是面試中出現頻率最高的;

棧與遞歸密切相關,隊列與廣度優先遍歷算法密切相關。

1. 數組

順序存儲數據。

預先分配內存:創建數組時,我們需要首先制定數組的容量大小,根據大小分配內存。

問題:空間效率不好,經常會有空閑的區域沒有得到充分利用。

優點:內存連續,可根據下表在O(1) 時間讀/寫任何元素,時間效率高

實現簡單哈希表:數組下標設為哈希表的鍵值(key),數組中的數字位哈希表的值(value)。可以在O(1)時間內實現查找,快速、高效地解決問題。

動態數組:解決數組空間效率不高的問題。

例:C++的STL中的vector。可擴容。但這種額外操作影響時間性能。需要盡量減少改變數組容量大小的次數。

數組名也是一個指針,利用指針訪問數組時,要防止越界。

舉例說明數組和指針的區別:

技術分享圖片

技術分享圖片

面試題:數組中重復的數字

技術分享圖片

技術分享圖片

【 劍指Offer 1 】數據結構