LeetCode 75 顏色分類 C

2021-08-22 06:11:31 字數 1195 閱讀 3507

給定乙個包含紅色、白色和藍色,一共 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,...