荷蘭國旗問題引出的三色排序
現在有若干個紅、白、藍三種顏色的球隨機排列成一條直線。現在我們的任務是把這些球按照紅、白、藍排序,就類似於荷蘭國旗一樣。
這個問題我們可以將這個問題視為一個陣列排序問題,這個陣列分為前部,中部和後部三個部分,每一個元素(紅白藍分別對應0、1、2)必屬於其中之一。
由於紅、白、藍三色小球數量並不一定相同,所以這個三個區域不一定是等分的,也就是說如果我們將整個區域放在[0,1]的區域裡,由於三色小球之間數量的比不同(此處假設1:2:2),可能前部為[0,0.2),中部為[0.2,0.6),後部為[0.6,1]。我們的思路如下:將前部和後部各排在陣列的前邊和後邊,中部自然就排好了。
具體方法如下:
設定兩個標誌位begin和end分別指向這個陣列的開始和末尾,然後用一個標誌位i從頭開始進行遍歷:
1)若遍歷到的位置為0,則說明它一定屬於前部,於是就和begin位置進行交換,然後i向前進,begin也向前進(表示前邊的已經都排好了)。
2)若遍歷到的位置為1,則說明它一定屬於中部,根據總思路,中部的我們都不動,然後i向前進。
3)若遍歷到的位置為2,則說明它一定屬於後部,於是就和end位置進行交換,由於交換完畢後i指向的可能是屬於前部的,若此時i前進則會導致該位置不能被交換到前部,所以此時i不前進。而同1),end向前進一。
具體程式碼如下:
class Solution {
public:
void sortColors(int A[], int n) {
int begin = 0;
int end = n-1;
int i = 0;
while(i<end+1)
{
if(A[i]==0)
{
swap(A[i], A[begin]);
begin++;
i++;
}
else if(A[i]==2)
{
swap(A[i], A[end]);
end--;
//i++;
}
else
i++;
}
}
};
相關文章
- 彩虹排序 | 荷蘭旗問題排序
- 高頻面試考題:荷蘭旗問題面試
- 在連結串列上實現 Partition 以及荷蘭國旗問題
- 迴圈不變數之荷蘭國旗變數
- mysql 刪表引出的問題MySql
- 荷蘭國家統計局:荷蘭特斯拉車主被開超速罰單比例高達75%
- 荷蘭推出國家區塊鏈研究計劃區塊鏈
- 荷蘭加密貨幣許可證加密
- 荷蘭伺服器有哪些優勢?荷蘭伺服器又該如何選擇呢?-VeCloud伺服器Cloud
- python安裝MySQL庫引出的一些問題PythonMySql
- [20231029]使用cygwin調式bash shell引出的問題.txt
- 從閉包引出來的一系列問題
- Next.js-頁面重複渲染引出的水合問題JS
- Dealroom:2021年荷蘭教育科技報告OOM
- 預計2020年荷蘭外國遊客將達2000萬人 超本國人口
- 一位荷蘭程式設計師眼中的DDD - hexmaster程式設計師AST
- 荷蘭官方研究:來自中國的新冠病毒檢測試劑盒優於其他國家
- 荷蘭國際關係研究所:詳解中國的數字絲綢之路(附下載)
- 恆訊科技介紹:荷蘭Serverius資料中心Server
- 荷蘭國際集團:調查顯示38%歐洲人買不起房
- KentekenRadar:特斯拉Model 3成荷蘭最暢銷車型
- 荷蘭法院判決比特幣具有“財產屬性”比特幣
- 荷蘭銀行實施大規模DevOps經驗dev
- 這就是選擇排序的問題排序
- 單連結串列的排序問題排序
- 恆訊科技介紹:緬甸vps荷蘭vps的資料中心
- CTF學習(20)MISC(荷蘭寬頻資料洩露)
- Array.sort排序問題排序
- 荷蘭為什麼應該增加使用可再生能源?
- 2019年12月荷蘭特斯拉Model 3銷量達11563輛
- 2022年比利時、盧森堡和荷蘭電商市場
- 索尼互動娛樂SIE收購荷蘭Nixxes工作室
- 與堆和堆排序相關的問題排序
- 荷蘭香蜜杏品種介紹和種植技術ZGR
- 凱斯紐荷蘭工業集團停止在中國市場銷售工程機械裝置
- C語言解決排序問題C語言排序
- 補檔 荷蘭留學概況一站式介紹_趙夢晨的部落格_新東方前途出國
- cpp:const引出的那些事