每日一演算法

2021-09-29 15:24:32 字數 788 閱讀 6821

leetcode 75 號題

給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,> 並按照紅色、白色、藍色順序排列。

此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

注意:不能使用**庫中的排序函式來解決這道題。

示例:輸入: [2,0,2,1,1,0]

輸出: [0,0,1,1,2,2]

思路結合三路快排partition思路的應用,設定兩個索引,乙個從左往右滑動zero,乙個從右往左滑動two,遍歷nums,當nums[i]的值為1時,i++;當nums[i]的值為2時,two的值先減1,而後交換nums[i]與nums[two],此時在觀察nums[i]的值;當nums[i]的值為0時,zero++,而後交換nums[i]與nums[zero],i++;當 i = two時,結束迴圈。

# **實現,python 3

def cal(x):

zero = -1

two = len(x)

i = 0

while i != two:

if x[i] == 1:

i += 1

elif x[i] == 2:

two -= 1

x[i], x[two] = x[two], x[i]

elif x[i] == 0:

zero += 1

x[i], x[zero] = x[zero], x[i]

i += 1

print(x)

每日一演算法

答主大二,這學期剛開了資料結構與演算法的課程,但課堂上只提及基礎的增刪改查,遠遠不能滿足對資料結構相對熟悉的需求,因而答主便有了 每日演算法 專題練習的想法,有需要的可以共同練習,與君共勉 適用人群 資料結構與演算法初學者 題型大多來自leetcode 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 ...

每日一演算法1

插入排序 首先來解釋一下插入排序法的原理 它的原理是每插入乙個數都要將它和之前的已經完成排序的序列進行重新排序,也就是要找到新插入的數對應原序列中的位置。那麼也就是說,每次插入乙個數都要對原來排序好的那部分序列進行重新的排序,時間複雜度同樣為o n 這種演算法是穩定的排序方法。下面我用乙個圖來解釋一...

每日一演算法 A B Problem

描述give you two numbers a and b,how to know the a b s the last digit number.it looks so easy,but everybody is too lazy to slove this problem,so they re...