資料結構基礎訓練 陣列與字串

2021-10-21 13:52:00 字數 1634 閱讀 6933

kmp雙指標

1,理解陣列的 基本概念 及其 操作方式;

2,理解 二維陣列 的基本概念,熟悉二維陣列的使用;

3,了解 字串 的概念以及字串所具有的不同特性;

4,理解字串匹配中的 kmp 演算法;

5,能夠運用 雙指標 解決實際問題。

集合是爺爺,列表是爸爸,字串是兒子

陣列的查詢

按位置查詢:時間複雜度:o(1)。索引+偏移量(下標)

按值查詢:時間複雜度:o(n)。計算機不知道個位置處的值資訊,需要一一查詢判斷。

新增元素

時間複雜度:o(n)

刪除元素

時間複雜度:o(n)

只考慮最壞情況的時間複雜度

kmp主要演算法**

int match

(char*

p, char*s)

// 則轉到下一字元

else

j = next[j]

;// 模式串右移(注意:文字串不用回退)

delete

next;

// 釋放 next 表

return i - j;

}

構造 next 表參考**
int*

buildnext

(char*p)

else

// 失配

t =n[t]

;returnn;

}

情景一

解決從兩端向中間迭代陣列

例:反轉陣列中的元素。比如陣列為 [『l』, 『e』, 『e』, 『t』, 『c』, 『o』, 『d』, 『e』],反轉之後變為 [『e』, 『d』, 『o』, 『c』, 『t』, 『e』, 『e』, 『l』]。

**展示:

def reversestring

(self, s)

: i, j =0,

len(s)-1

while i < j:

s[i]

, s[j]

= s[j]

, s[i]

i +=

1 j -=

1

思想:使用雙指標技巧,其思想是分別將兩個指標分別指向陣列的開頭及末尾,然後將其指向的元素進行交換,再將指標向中間移動一步,繼續交換,直到這兩個指標相遇。

情景二解決同時有乙個慢指標和乙個快指標。

例:給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。

**展示:

def removeelement

(self, nums: list[int]

, val: int)

-> int:

slow =

0 n =

len(nums)

for fast in

range

(n):

if nums[fast]

!= val:

nums[slow]

= nums[fast]

slow +=

1return slow

思想:確定兩個指標的移動策略。

資料結構基礎訓練 陣列與字串

學習心得 1.陣列 陣列與列表最大的不同點是列表中沒有索引,其次陣列中的元素在記憶體中是連續儲存的,且每個元素占用相同大小的記憶體 對於陣列,計算機會在記憶體中為其申請一段連續的空間,並且會記下索引為 0 處的記憶體位址 2.字串的基本操作物件通常是字串整體或者其子串 是否可以使用 比較兩個字串取決...

資料結構基礎訓練陣列與字串

給定乙個排序陣列和乙個目標值,在陣列中找到目標值,並返回其索引。如果目標值不存在於陣列中,返回它將會被按順序插入的位置。你可以假設陣列中無重複元素。示例 1 輸入 1,3,5,6 5 輸出 2 示例 2 輸入 1,3,5,6 2 輸出 1 int searchinsert int nums,int ...

資料結構基礎訓練

1.陣列簡介 2.二維陣列簡介 3.字串簡介 1尋找陣列的中心索引 2旋轉矩陣 3最長公共字首 1.尋找陣列的中心索引 給你乙個整數陣列 nums,請編寫乙個能夠返回陣列 中心下標 的方法。陣列 中心下標 是陣列的乙個下標,其左側所有元素相加的和等於右側所有元素相加的和。如果陣列不存在中心下標,返回...