集合一般被定義為:由乙個或多個確定的元素所構成的整體。 通俗來講,集合就是將一組事物組合在一起。你可以將力扣的題庫看作乙個集合。
集合有什麼特性呢?集合裡的元素型別不一定相同;集合裡的元素沒有順序
列表(又稱線性列表)的定義為:是一種資料項構成的有限序列,即按照一定的線性順序,排列而成的資料項的集合。
列表的概念是在集合的特徵上形成的,它具有順序,且長度是可變的。
陣列是列表的實現方式之一,也是面試中經常涉及到的資料結構。那麼如何從巨集觀上區分列表和陣列呢?這裡有乙個重要的概念:索引。
其次,陣列中的元素在記憶體中是連續儲存的,且每個元素占用相同大小的記憶體。相反,列表中的元素在記憶體中可能彼此相鄰,也可能不相鄰。
共4種操作方式:讀取、查詢、插入、刪除
讀取:讀取陣列中的元素,即通過陣列的索引訪問陣列中的元素。這裡的索引其實就是記憶體位址,計算機可以跳躍到任意的記憶體位址上,這就意味著只要計算出陣列中元素的記憶體位址,則可以一步訪問到陣列中的元素。對於陣列,計算機會在記憶體中申請一段連續的空間,並且會記下索引為0
處的記憶體位址。
時間複雜度: o(1)
查詢:計算機只會儲存陣列中索引為0
處元素的記憶體位址,因此當計算機想要知道陣列中是否包含某個元素時,只能從索引0
處開始,逐步向後查詢。
最壞情況下時間複雜度:o(n)
如果要將該元素插入到陣列中的其他位置,則會有所區別,這時我們首先需要為該元素所要插入的位置騰出
空間,然後進行插入操作。從插入位置之後的元素都要向後移動,然後插入該元素。
刪除:刪除元素與插入元素的操作類似,當我們刪除掉陣列中的某個元素後,陣列中會留下 空缺 的位置,而陣列中的元素在記憶體中是連續的,這就使得後面的元素需對該位置進行填補操作。
中心索引:陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。
輸入:從數學上可得: 首先,計算整個陣列的和,記為sum;然後計算左邊 i-1 個值的和為sumleft,則右邊的和sumright為sum - sumleft - nums[i], 若sumleft = sumright,返回 i 即可。nums = [1, 7, 3, 6, 5, 6]
輸出:3
解釋:索引 3 (nums[3] = 6) 的左側數之和 (1 + 7 + 3 = 11),與右側數之和 (5 + 6 = 11) 相等。同時, 3 也是第乙個符合要求的中心索引。
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 結束,所以不能作為字串使用。...