JavaScript 的 Leetcode 演算之路(三)

Mike
I am Mike
Published in
4 min readOct 16, 2019

這次也要來解一個 Easy 的題目,就是這個 922. Sort Array By Parity II ,這個題目本身覺得設計的不錯,如果要當作面試題目的話好像也不錯,讓我們來看看吧。

我們先來看看題目的敘述( 922. Sort Array By Parity II):

Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even.Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even.You may return any answer array that satisfies this condition.Example 1:
Input:
[4,2,5,7]
Output: [4,5,2,7]
Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.

就是說他會給你一個 Array ,你要去區分Array內的奇數跟偶數,然後放在Array索引裡面,放入索引內也要分奇數跟偶數,以範例來說 [4,2,5,7]你要把 5 跟 7 放在索引上面的奇數位置,不用排序,4 跟 2 放在偶數的位置,所以 [4,7,2,5], [2,5,4,7], [2,7,4,5] 都是沒有問題的。

接下來我們來看一下我第一次提交的 code

我的思路是這樣的

  1. 我先把傳入的 Array 分類,奇數跟偶數分開來放。
  2. 然後再跑一個迴圈分別拉近來重組。
  3. 因為回傳的 Array 是不用排序的,所以我使用 pop()來取得我分開來的Number。
結果就過了XD

過了之後我就在思考應該是可以不用跑兩個迴圈就可以解決的,所以我後來又調整過寫法。

  1. 首先我先宣告一個 Array用來存放最後的結果,不過一開始我先把這個Array的長度給定義出來,好讓我可以直接指定。
  2. 再來我宣告兩個變數分別是奇數的索引跟偶數的索引 ,一個 0 ,一個 1。
  3. 跑迴圈的時候我們對於取出來的內容判斷它是奇數還是偶數,然後分別累加索引,只是這邊累加是每次疊加 2 的數值,依序塞入,最後就回傳。

這樣就不用跑兩次迴圈,速度也有提升,看起來 code 也簡潔不少。

這個題目其實做法蠻多的.但是要寫得漂亮需要思考一下,好啦~這次解題分享到這邊啦,如果有更好的寫法再請下面留言跟我說~

最後

我有開設一個youtube的頻道,每個月不定時週六或日晚上直播跟技術或是經驗相關的分享,有興趣的朋友歡迎追蹤訂閱+小鈴鐺。

--

--

Mike
I am Mike

如果有一行code無法解決的bug,那就寫兩行!