給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。
此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。
注意:
不能使用**庫中的排序函式來解決這道題。
示例:
輸入: [2,0,2,1,1,0]
輸出: [0,0,1,1,2,2]
高階:
乙個直觀的解決方案是使用計數排序的兩趟掃瞄演算法。
首先,迭代計算出0、1 和 2 元素的個數,然後按照0、1、2的排序,重寫當前陣列。
你能想出乙個僅使用常數空間的一趟掃瞄演算法嗎?
統計各個顏色數量(0、1、2的數量),按照數量遍歷陣列進行賦值。
if(nums.empty())
return;
int count[3] = ;
for(int i = 0; i
< nums.
size(); ++i)
for(int i = 0; i
< count[0]; i++)
for(int i = 0; i
< count[1]; i++)
for(int i = 0; i
< count[2]; i++)
設定0與1的邊界為zero(初始值設定為-1,保證界內無元素),1與2的邊界為two(初始值為nums.size(),保證界內無元素),遍歷陣列(索引為 i)
(1)若nums[ i ] == 1,i++
(2)若nums[ i ] == 0,則將zero右移一位,並將nums[ i ] 與 nums [ zero ]元素互換,i++
(3)nums[ i ] == 2的左移two,並將nums[ i ] 與 nums[ zero ] 互換,注意,此時 i 不變。
if(nums.empty())
return;
int zero = -1; //[0,zero]元素為1
int two = nums.size(); //[two,nums.size() - 1]元素為2
for(int i = 0; i < two; )
leetcode 75 顏色分類 c
題目 給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1...
leetcode 75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...
leetcode75 顏色分類
給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...