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