給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。算法
此題中,咱們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。數組
進階:編輯器
你能夠不使用代碼庫中的排序函數來解決這道題嗎?你能想出一個僅使用常數空間的一趟掃描算法嗎?函數
示例 1:blog
輸入:nums = [2,0,2,1,1,0] 輸出:[0,0,1,1,2,2] 示例 2:排序
輸入:nums = [2,0,1] 輸出:[0,1,2] 示例 3:class
輸入:nums = [0] 輸出:[0] 示例 4:進階
輸入:nums = [1] 輸出:[1]qq
提示:sort
n == nums.length 1 <= n <= 300 nums[i] 爲 0、1 或 2
//go // 理解了思想代碼應該不難實現,可是要注意一些細節 func sortColors(nums []int) { n := len(nums) i, s, e := 0, 0, n // 由於 e 設置爲了 n for i < e { // 因此 i<e if nums[i] == 0 { nums[i], nums[s] = nums[s], nums[i] s++ i++ }else if nums[i] == 1 { i++ }else { e-- // e爲n,防止下標越界,這裏要先減,在交換 nums[i], nums[e] = nums[e], nums[i] } } }
地址:https://mp.weixin.qq.com/s/-7LVMrG8cbN4Su3hn-62tw