iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0

Day12 Leetcode Array系列---- Move Zeroes

本次題目 Move Zeroes by JS

本次題目希望將給予的陣列重新排序,從左至右由大到小,但是希望將所有的 0 排列到陣列的右側

input = [0,1,0,3,12]
output = [1,3,12,0,0]

思考路線

  1. 先用 sort 把陣列數字排序
  2. 排序方法是比大小,x-y 相減如果是負數就不變動,x-y 相減是正數就把 x 往右擺,這樣會把所有的 0 擺到陣列的左邊
  3. 最後用 while 迴圈把所有的 0 放到陣列最後面

Coding Time

先將傳入的陣列 ary 排序,排序方式是如果左邊的數字比右邊的小,就把它移到右邊,sort 會重複檢查 ary 符不符合這個要求並不是指排序一次,是一直排直到排到好,

input = [0,1,0,3,12]
output = [1,3,12,0,0]

function moveZero(ary){
    a = ary.sort( (x,y)=>{ return x-y } )  //[ 0, 0, 1, 3, 12 ]
    while(a[0]== 0){
        b = a.shift()
        a.push(b)
    }

    return a
}

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

expect(moveZero(input),output)

sort排序方法----from MDN

  • 若 compareFunction(a, b) 的回傳值小於 0,則會把 a 排在小於 b 之索引的位置,即 a 排在 b 前面。
  • 若 compareFunction(a, b) 回傳 0,則 a 與 b 皆不會改變彼此的順序,但會與其他全部的元素比較來排序。備註:ECMAscript 標準並不保證這個行為,因此不是所有瀏覽器(如 Mozilla 版本在 2003 以前)都遵守此行為。
  • 若 compareFunction(a, b) 的回傳值大於 0,則會把 b 排在小於 a 之索引的位置,即 b 排在 a 前面。
    今天到此為止,有任何問題請在下方留言或透過email、GitHub聯絡我,感謝閱讀

Daily kitty


上一篇
Day 11 -- Find the Duplicate Number
下一篇
Day 13 -- Reshape the Matrix
系列文
菜雞的30天工程師轉職日記--Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言