陣列和字串

2021-10-08 19:31:09 字數 2065 閱讀 4032

集合一般被定義為:由乙個或多個確定的元素所構成的整體。 通俗來講,集合就是將一組事物組合在一起。你可以將力扣的題庫看作乙個集合。

集合有什麼特性呢?集合裡的元素型別不一定相同;集合裡的元素沒有順序

列表(又稱線性列表)的定義為:是一種資料項構成的有限序列,即按照一定的線性順序,排列而成的資料項的集合。

列表的概念是在集合的特徵上形成的,它具有順序,且長度是可變的。

陣列是列表的實現方式之一,也是面試中經常涉及到的資料結構。那麼如何從巨集觀上區分列表和陣列呢?這裡有乙個重要的概念:索引

其次,陣列中的元素在記憶體中是連續儲存的,且每個元素占用相同大小的記憶體。相反,列表中的元素在記憶體中可能彼此相鄰,也可能不相鄰。

共4種操作方式:讀取、查詢、插入、刪除

讀取:讀取陣列中的元素,即通過陣列的索引訪問陣列中的元素。這裡的索引其實就是記憶體位址,計算機可以跳躍到任意的記憶體位址上,這就意味著只要計算出陣列中元素的記憶體位址,則可以一步訪問到陣列中的元素。對於陣列,計算機會在記憶體中申請一段連續的空間,並且會記下索引為0處的記憶體位址。

時間複雜度: o(1)

查詢:計算機只會儲存陣列中索引為0處元素的記憶體位址,因此當計算機想要知道陣列中是否包含某個元素時,只能從索引0處開始,逐步向後查詢。

最壞情況下時間複雜度:o(n)

如果要將該元素插入到陣列中的其他位置,則會有所區別,這時我們首先需要為該元素所要插入的位置騰出空間,然後進行插入操作。從插入位置之後的元素都要向後移動,然後插入該元素。

刪除:刪除元素與插入元素的操作類似,當我們刪除掉陣列中的某個元素後,陣列中會留下 空缺 的位置,而陣列中的元素在記憶體中是連續的,這就使得後面的元素需對該位置進行填補操作。

中心索引:陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。

輸入:

nums = [1, 7, 3, 6, 5, 6]

輸出:3

解釋:索引 3 (nums[3] = 6) 的左側數之和 (1 + 7 + 3 = 11),與右側數之和 (5 + 6 = 11) 相等。同時, 3 也是第乙個符合要求的中心索引。

從數學上可得: 首先,計算整個陣列的和,記為sum;然後計算左邊 i-1 個值的和為sumleft,則右邊的和sumright為sum - sumleft - nums[i], 若sumleft = sumright,返回 i 即可。

int pivotindex(vector& nums) 

//cout << sum << endl;

for(int i=0; i給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。

示例 1:

輸入: [1,3,5,6], 5

輸出: 2

示例 2:

輸入: [1,3,5,6], 2

輸出: 1

示例 3:

輸入: [1,3,5,6], 7

輸出: 4

示例 4:

輸入: [1,3,5,6], 0

輸出: 0

int searchinsert(vector& nums, int target)

nums.push_back(target);

sort(nums.begin(), nums.end());

return searchinsert(nums, target);

}

字串和字串陣列

字串陣列 include int main int argc,const char ar printf name1 s n name1 name1 zhangsan 部分初始化中,沒有被初始化的元素預設是0,0 對應的ascii值是 0 char name2 9 printf name2 s n n...

字串和字串陣列和 0

c語言中字串為什麼要有 0呢?0在字串中的作用是什麼 0 在字串中標誌著結尾 用來判斷這個字串已經結束 如果不新增 0 系統就在記憶體中一直向後讀,直到讀到 0 為止 這個情況就造成錯誤 乙個語句結束了,就用分號 表示結束 首先要區分,字元,字元陣列,字串的區別。字串預設的最後會有 0 char k...

字串和字元陣列

void test1 函式test1中,指標str1所指向的字串有11個元素。一定要注意字串是以 0 為結尾的,而strcpy拷貝了整個字串包括 0 所以存在下標越界的問題。void test2 函式test2中,字元陣列str1包含10個元素。陣列str1並不是以 0 結束,所以不能作為字串使用。...