演算法小白 LeetCode刷題篇(一)

2021-10-20 03:26:11 字數 3920 閱讀 4730

題目指路

題目描述:

編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。

示例 1:

輸入:「hello」

輸出:「holle」

示例 2:

輸入:「leetcode」

輸出:「leotcede」

思路一(比較菜的雙指標):

兩邊的指標逐漸向中間逼近,直到兩指標重合跳出迴圈。

兩指標移動的時候分為以下幾種情況:

1.當左指標沒有指向母音字母,右指標也沒有指向母音字母時,這種情況一般多見於初始狀態(當然,初始狀態時也可能有指標指向母音字母的情況),此時,左指標向右移動;

2.當左指標指向母音字母,右指標沒有指向母音字母時,左指標停止移動,右指標向左移動;

3.當左指標和右指標同時指向母音字母時,兩母音字母執行交換操作,交換之後,左指標向右移動,此時還需要先檢查移動後的左指標與右指標有沒有重合,若重合則跳出迴圈;若沒有重合,右指標也向左移動;

4.當左指標沒有指向母音字母,右指標指向母音字母時,右指標停止移動,左指標向右移動;

所有的前提還得判斷字串不是「」。

);這塊可以稍微優化一下

後圖將迴圈條件修改了一下。

以上優化可以誕生出思路二(稍微優化一點的雙指標):

為了降低時間複雜度,可以適當將移動乙個指標變為同時移動兩個指標。以下思路中,將符合最後乙個判斷條件的情況改為同時移動兩個指標。

簡化了一下判斷條件

1.當左指標指向的不是母音字母時,左指標向右移動;

2.當右指標指向的不是母音字母時,右指標向左移動;

3.當以上兩個條件都不滿足時,即左指標和右指標指向的都是母音字母,則交換位置,左指標向右移動,右指標向左移動;

前面幾種思路一直困擾的乙個問題是,轉換成string型別的陣列比轉換成char型的陣列慢,所以我們這一次嘗試轉換成char型別的陣列,還是採用思路三中雙指標的方法。

;再將下圖的這一部分進行修改

變為以下**

LeetCode刷題 演算法篇

暴力解法 class solution def twosum self,nums list int target int list int i 0 while i j i 1 while j if nums i nums j target return i,j j 1i 1 return none ...

leetcode刷題 開始篇

第一道題 reverse words in a string.也就是說翻轉乙個字串的單詞。例如輸入為 hello world,it suck but i love it.輸出為 it love it but suck it world,hello 基本思路為 首先進行整個字串的reverse。然後對...

演算法 LeetCode刷題

given 1,3 2,6 8,10 15,18 return 1,6 8,10 15,18 關鍵就是a 1 b 0 也就是array i 1 1 array i 0 const merge array return array console.log merge 1,3 8,10 2,6 15,1...