資料結構 陣列與字串 雙指標的應用總結

2021-10-08 20:45:56 字數 2357 閱讀 8281

雙指標技巧一:乙個從開始,乙個從結尾,兩指標相遇

start :=

0end :=

len(arr)-1

for end > start

從目前遇到的題目來看,總結了兩種場景下,需要考慮;其他場景後面遇到再補充

題目:翻轉字串

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。

不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 o(1) 的額外空間解決這一問題。

你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。

示例 1:

輸入:[「h」,「e」,「l」,「l」,「o」]

輸出:[「o」,「l」,「l」,「e」,「h」]

分析:典型的首尾指標相遇,直接用模板的**,在操作出進行交換就可以

兩數之和 ii - 輸入有序陣列

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。

函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。

說明:返回的下標值(index1 和 index2)不是從零開始的。

你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。

示例:輸入: numbers = [2, 7, 11, 15], target = 9

輸出: [1,2]

解釋: 2 與 7 之和等於目標數 9 。因此 index1 = 1, index2 = 2 。

直接上**

// 是模板的一種變種;增加了一種何時需要判斷首指標和尾指標進行前進

func

twosum

(numbers [

]int

, target int)[

]int

for end>start

else

if(numbers[start]

+numbers[end]

>target

else

}return result

}

雙指標技巧二:快慢指標,兩指標的運動方向相同
最終要的是 兩個指標的移動策略

你有時可能需要在使用雙指標技巧之前對陣列進行排序,也可能需要運用貪心法則來決定你的運動策略。

一般情況是 不增加額外的空間,在陣列中進行移動。滿足的條件一般是字串中乙個特殊(相對於其他字元特殊)的乙個字元把字串進行相隔可分成多段(空格、1等)

另外一種情況就是區間特殊字元相隔的區間最大值或最小值(這裡面就要對比一下滑動視窗)

index :=

0for start:=

0;start<

len(arr)

;start++

// 這裡一般做達到條件的一些操作

//reverse(s.begin() + idx - (end - start), s.begin() + idx);

start = end

}}

leetcode485【簡單】 最大連續1的個數

給定乙個二進位制陣列, 計算其中最大連續1的個數。

示例 1:

輸入: [1,1,0,1,1,1]

輸出: 3

解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.

注意:輸入的陣列只包含 0 和1

leetcode27 【簡單】 移除元素

leetcode 151 【中等】 翻轉字串裡的單詞

給定乙個字串,逐個翻轉字串中的每個單詞。

示例 1:

輸入: 「the sky is blue」

輸出: 「blue is sky the」

示例 2:

輸入: " hello world! "

輸出: 「world! hello」

解釋: 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。

示例 3:

輸入: 「a good example」

輸出: 「example good a」

解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含乙個。

資料結構 陣列,字串

陣列 字串是兩種最基本的資料結構,使用連續記憶體分別存數字和字元,並按照順序儲存。str indexofnew str indexoforiginal str indexofnew str indexoforiginal indexofnew bool duplicate int numbers,i...

資料結構4 陣列與字串

list item 動態陣列vector的使用 好難好難,一臉懵逼.以對角線入手進行觀察 vector int finddiagonalorder vector int matrix 矩陣行列 k用於控制對角線行數的的奇偶 int m matrix.size n matrix 0 size r 0,...

指標陣列,陣列指標,字串與指標

在研究指標陣列與陣列指標的時候,遇到了這個困惑,後面解答。void test02 char c 4 char p2 4 指標陣列 for int j 0 j 4 j for int i 0 i 4 i 指標陣列是陣列,即乙個陣列中,每個元素都是指標 void test05 注意這一行和最後一行的區別...