#LeetCode:75. Sort Colors

灆洢 2020-06-12 01:16:08

此題要將給予的花朵陣列依照紅、白、藍的順序排好。

解題的想法大致上就是將紅與藍排好的話,白色的花就會排好了。所以就巡覽陣列,若遇到紅的花就從前頭開始排,若遇到藍的花就從尾巴開始排,依此方式去交換陣列裡的花即可得解。

Kotlin(156ms)

/*******************************************************/
/* LeetCode 75. Sort Colors                            */
/* Author: Maplewing [at] knightzone.studio            */
/* Version: 2020/06/12                                 */
/*******************************************************/
fun IntArray.swap(i: Int, j: Int) {
    val temp = this[i]
    this[i] = this[j]
    this[j] = temp
}

class Solution {
    fun sortColors(nums: IntArray): Unit {
        var redTailIndex = -1
        var blueHeadIndex = nums.size

        var currentIndex = 0
        while (currentIndex < blueHeadIndex) {
            when (nums[currentIndex]) {
                0 -> nums.swap(currentIndex, ++redTailIndex)
                2 -> nums.swap(currentIndex--, --blueHeadIndex)
            }
            ++currentIndex
        }
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料