河南國旗問題

2021-10-05 22:22:58 字數 833 閱讀 9207

給定乙個陣列arr,和乙個數num,請把小於num的數放在陣列的左邊,等於num的數放在陣列的中間,大於num的數放在陣列的右邊。要求額外空間複雜度為o(1),時間複雜度為o(n)

package sort_learning;

public

class

netherlandsflag

else

if(arr[cur]

> num)

else

// =num時

cur++;}

return

newint

;}public

static

void

swap

(int

arr,

int i,

int j)

}

也就是說,給定乙個待定區域,我們在遍歷的過程中,

遇到等於的就往下走了。

遇到小於就往小於區域發貨,把等於區域的拿過來(這說明不用確定cur位置上的數,因此此時不僅要left++,而且cur++),讓小於區域擴乙個位置,實際上就是小於區區域的推著等於區域往右跑。

遇到大於num區域的數時,只是要放到最右側大於區域裡面,但中間還有個待定區啊,這時拿出來的是待定區域的位置(這說明cur位置上的數仍然還是要確定的,因此此時right++,而cur不變)。

所以這就是為什麼當你發現乙個數小於num的時候,你把這個小於的數扔到小於區域裡面,你換回來的一定是等於區域,要麼就是你等於區域沒有,小於區域自己跟自己交換,小於區域擴乙個位置,不管是哪一種你都不用再重複考察cur位置上的數。

荷蘭國旗問題

上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...

荷蘭國旗問題

問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...

荷蘭國旗問題

荷蘭的國旗由紅色 白色和藍色3種顏色組成。現在假設有很多這3種顏色的線被存放在乙個陣列裡,要求每次操作僅能進行一次交換,在原陣列的基礎上操作。待對陣列進行一遍掃瞄後,3種顏色自然分開,顏色順序為紅 白 藍。另外,要求在o n 的複雜度下,是移動次數最少。荷蘭國旗問題 include include ...