LeetCode75 顏色分類(三指標法)

2021-10-12 16:27:13 字數 1002 閱讀 1568

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

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

示例 1:

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

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

示例 2:

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

輸出:[0,1,2]

示例 3:

輸入:nums = [0]

輸出:[0]

示例 4:

輸入:nums = [1]

輸出:[1]

題目要得到的結果是把1放在中間,0放在最前面,2放在最後面的乙個陣列,這一題主要是通過三指標來進行解決的,因為有三個型別的值0,1,2,這三個值可以分別用 p0, p1, p2 這三個指標進行替代。

這樣設定三個指標,模仿快排的思路,p0代表下乙個可以放置0的位置,p2代表下乙個可以放置2的位置,兩個指標之間就是應該就是放1的位置。

開始時將p0指向 nums[0] ,p2 指向 nums 陣列的最後,p1 用來遍歷陣列,最開始指向 nums[0] ,並且 p1 只能位於 p0 和 p2 之間,利用 p1 遍歷陣列過程中有三種情況:

遇到 1 因為此時在 p0 和 p2 之間,所以不管。

遇到 0,將其與 p0 所指向的元素交換,然後 p0 自加1,換回來的肯定是1,所以 p1 也自加1。

遇到 2,和 p2 所指的元素交換,因為換回來的元素不確定是等於多少,所以不能讓 p1 自加1,但是 p2 要自減1。

c++ **如下:

class

solution}}

;

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,...

leetcode75 顏色分類

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