iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
0

Day20 Leetcode Array系列---- Sort Colors

本次題目 Sort Colors by JS

希望將散亂的顏色順序排列好,這裡用 0 代表紅色, 1 代表白色, 2表示藍色,不希望使用 sort 方法排序

input = [2,0,2,1,1,0]
output= [0,0,1,1,2,2]

思考路線 1

  1. 需要紀錄三種顏色分別出現幾次
  2. 準備空陣列裝結果
  3. 迴圈去計算顏色出現次數
  4. 根據順序依序添加顏色

Coding Time

準備 r w b 三種變數記錄顏色出現次數

用迴圈加上 if 判斷顏色出現幾次

最後先判斷是否出現過這個顏色,如果有在把它出現幾次與對應數字添加進結果中

input=[2,0,2,1,1,0]
output= [0,0,1,1,2,2]

function arrangeColor(ary){
    r = 0 // 0 => red
    w = 0 // 1 => white
    b = 0 // 2 => blue
    result = []
    ary.forEach( color => {
        if(color == 0){
            r += 1
        }else if(color == 1){
            w += 1
        }else{
            b += 1
        }
    })
    if( r != 0 ){
        result = result.concat(Array(r).fill(0))
    }
    if( w != 0 ){
        result = result.concat(Array(w).fill(1))
    }
    if( b != 0 ){
        result = result.concat(Array(b).fill(2))
    }
    console.log(result)
    return result
}

function expect(a,b){
    console.log(JSON.stringify(a)==JSON.stringify(b))
}

expect(arrangeColor(input),output)

原先的想法是去做迴圈,出現紅色就塞到 result 前面 (unshift),出現藍色就塞到後面 (pop),但是白色要怎麼塞就需要去計算有幾個紅色,要插入到 result 的第幾個位置,後來想想,我可以依照 output 要求的順序,判斷是否有出現該顏色,就塞幾個,依照顏色順序塞下去,就不用考慮插入顏色的問題

今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀

Daily kitty


上一篇
Day 19 -- Squares of a Sorted Array
下一篇
Day 21 -- Largest Rectangle in Histogram
系列文
菜雞的30天工程師轉職日記--Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言