陣列就是這麼簡單
一、背景
這篇文章主要介紹陣列與動態陣列,然後分享三個例子來輔助講解陣列的使用。
二、陣列
陣列是一個順序儲存資料的基本資料結構。
由於陣列的每個元素可以通過下標來訪問,所以陣列支援隨機訪問。
陣列可以有一維或者多維。
這裡先講一維陣列,也就是線性陣列。
例如下圖:
在這個例子中,陣列 A
有6個元素。
也就是說陣列的長度是 6
。
我們可以通過 A[0]
來代表陣列的第一個元素。
因此 A[0]
可以得到值 6
,同樣的, A[1]
可以得到值 3
, A[2]
可以得到值 8
。
具體操作如下:
三、動態陣列
前面提到,對於陣列是有固定的容量的。所以初始化陣列的時候我們需要指定陣列的長度。
有時候,這種固定陣列會有些不方便,而且也會造成空間浪費。
因此,很多程式語言都預設支援動態陣列。它仍然是一個隨機訪問的列表資料結構,但是大小可變。
例如,在 C++
語言中,這個動態陣列就是 vector
。
四、尋找陣列的中心索引
對於給定的一個數組,我們需要求對應的中心索引。
中心索引定義:中心索引左側所有元素之和等於右側所有元素之和。
如果不存在中心索引,則返回 -1
。如果存在多個,則返回最靠左邊的那個索引下標。
中心索引的左側所有元素和右側所有元素之和相等,那我們可以三步。
第一步計算所有索引左側元素之和。
第二步計算所有索引右側元素之和。
第三部查詢滿足條件的中心索引。
五、至少是其他數字兩倍的最大數
給一個數組,總是存在唯一的最大值。
我們需要判斷這個最大值是否大於等於其他數字的兩倍。
如果是,則返回最大值的下標,否則返回 -1
。
這道題分兩步。
第一步是找到最大值和下標。
第二步是判斷是否滿足條件。
注意事項是判斷是否滿足條件時,需要過濾最大元素。
六、加一
給定一個一位整陣列成的非空陣列來表示非負整數。
求加一後的陣列。
這道題有點大整數運算的味道。
不過這裡只要求加一。
想想我們在紙上計算加一操作的步驟。
首先個位加一,判斷是否需要進位,不需要則計算結束。
需要進位則將進位的數字加到十位,然後繼續判斷。
如果到達最高位,依舊要進位,我們就將進位的數字補在最前面(總位數加一)。
面對這道題,也應該分幾步。
第一步是迴圈計算進位。
第二部是判斷最高位是否依舊需要進位,需要則將進位插入到最前面。
七、最後
作為一個程式設計師,大家看到這篇文章肯定會感覺特別水。
不過沒關係,資料結構剛開始就是很簡單很水的,到後面難度會逐漸增加的。
希望我能夠堅持到那一天吧。
-EOF-