Leetcode刷題筆記 顏色分類

2022-05-07 10:18:09 字數 1016 閱讀 1175

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

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

注意:

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

示例:

輸入: [2,0,2,1,1,0]

輸出: [0,0,1,1,2,2]

高階:

乙個直觀的解決方案是使用計數排序的兩趟掃瞄演算法。

首先,迭代計算出0、1 和 2 元素的個數,然後按照0、1、2的排序,重寫當前陣列。

你能想出乙個僅使用常數空間的一趟掃瞄演算法嗎?

一次遍歷完成排序,那麼就要在遍歷的過程中完成移動。思路是,記錄下已經碰到的0的數量nums0和2的數量nums2,初始都為0。遍歷過程中,碰到數字0,就往前面挪,具體來說就是當前位置i上的數與下乙個0的放置位上的數進行交換,下乙個0的放置位為nums[nums0];同理,碰到2的話,則交換i位置和nums[nums.length-1-nums2]位置上的數;當碰到1時,不做交換,i向前走1位。

需要注意的一點是,當碰到陣列起始位為0時,交換的兩個位置相同,而交換完了nums0加一,i卻不變,這樣會造成錯誤,此當i

/**

* * 解題思路:一次遍歷,碰到0往前挪,碰到2往後挪,碰到1不動,但指標加1

* @param

nums

*/public

static

void sortcolors(int

nums)

else

if(nums[i] == 1)

else}}

public

static

void swap(int nums, int i, int

j)

另外,這道題是我自己想出來的,看了官方題解說這個是「荷蘭國旗問題」,而且解題思路和我想的基本一致,哈哈哈我太聰明了!

LeetCode刷題 (75) 顏色分類

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

leetcode刷題 75顏色分類

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

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...