Leetcode題庫 顏色分類(java語言版)

2021-09-11 11:48:38 字數 1743 閱讀 9960

題目描述:

給定乙個包含紅色、白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。

此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

注意:

不能使用**庫中的排序函式來解決這道題。

示例:

輸入:[2,0,2,1,1,0]輸出:[0,0,1,1,2,2]
高階:看到題目我首先想到的就是排序,所以

第一種思路就是用排序來做,我是用氣泡排序來做,時間複雜度高o(n^2),快速排序目前還模稜兩可,後面更新用快速排序做的方法。

第二種思路就是取巧,題目要求,有三種顏色,0,1,2,那麼我們可以將0找到放到陣列前面,將二找到放到陣列後面,至於1,0,2放好之後,1自然就是放好的。這種時間複雜度很低o(n)

第三種思路就是統計這0,1,2出現的次數,然後挨個(按照順序)賦值個那個原陣列,這種方法時間複雜度o(n),但掃瞄兩邊陣列,速度比第二中思路慢一點,但比第一種快。

具體看**:

第一種思路:

public void sortcolors(int nums) }}

public static void main(string args);

顏色分類 yanse = new 顏色分類 ();

yanse.sortcolors ( a );

}

執行結果:

執行用時:

第二種方法,因為只有0,1,2所以,讓0去前面,讓2去後面,1不用管,然後0都到前面了,2都到後面了,1自然就在中間了

// 定義首部(為0時的下標)

int k = -1;

// 用於交換的中間變數

int t;

// 定義尾部(為2時的下標)

int n = nums.length;

// 這個地方i必須小於n,因為n隨著遍歷會逐漸遞減,當前面是00,後面是22時,如果i《陣列長度,然後又會將排好的2重新和中間11比較,又會打亂順序,隨意,這個i要小於這個變化n,當前面是00,後面是22時,陣列停止遍歷,退出。(也就是i《最後乙個1的下標時結束for)。

for (int i = 0;i執行用時:

第三種思路:

// 第三種方法

int a=0;

int b=0;

int c=0;

for (int i=0;i執行用時:

總結:這道題其實最好的方法就是排序,但也有取巧的方法,但我就會兩三種,還得慢慢學,後面會不斷更新。

2018-2-27

leetcode 顏色分類

75顏色分類 給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0...

LeetCode 顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...

LeetCode 顏色分類

給定乙個包含紅色 白色和藍色,一共 n 個元素的陣列,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色 白色 藍色順序排列。此題中,我們使用整數 0 1 和 2 分別表示紅色 白色和藍色。注意 不能使用 庫中的排序函式來解決這道題。示例 輸入 2,0,2,1,1,0 輸出 0,0,1,1,2,...