顏色分類

題目

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

相關文章
相關標籤/搜索