題目大意是給乙個長度為n的整數序列,然後再給乙個數num,然後將小於這個num的放在序列前面,等於num的放在序列中間,大於num的放在序列的後面,不要求排序,時間複雜度o(n),空間複雜度o(1)(即不能構造其他陣列)
這裡沒怎麼用到演算法的基礎,而是運用資料的調配,首先我們在陣列的兩端放兩個指標,乙個head,乙個end,head前面的是小於num區的數,end後面的是大於num區的數,中間的就是等於num區的數。
然後遍歷陣列,如果有小於num的數,就和小於區的下乙個元素交換,然後小於區擴大乙個,如果有大於num的數,就和大於區的前乙個元素進行交換,然後大於區擴大乙個,直到迴圈遍歷到大於區為止
然後貼上**
#include#include#include using namespace std;
int main()
else i++;
}for(int i=0;ireturn 0;
}
荷蘭國旗問題
上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...
荷蘭國旗問題
問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...
荷蘭國旗問題
荷蘭的國旗由紅色 白色和藍色3種顏色組成。現在假設有很多這3種顏色的線被存放在乙個陣列裡,要求每次操作僅能進行一次交換,在原陣列的基礎上操作。待對陣列進行一遍掃瞄後,3種顏色自然分開,顏色順序為紅 白 藍。另外,要求在o n 的複雜度下,是移動次數最少。荷蘭國旗問題 include include ...