這次也要來解一個 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
我的思路是這樣的
- 我先把傳入的 Array 分類,奇數跟偶數分開來放。
- 然後再跑一個迴圈分別拉近來重組。
- 因為回傳的 Array 是不用排序的,所以我使用
pop()
來取得我分開來的Number。
過了之後我就在思考應該是可以不用跑兩個迴圈就可以解決的,所以我後來又調整過寫法。
- 首先我先宣告一個 Array用來存放最後的結果,不過一開始我先把這個Array的長度給定義出來,好讓我可以直接指定。
- 再來我宣告兩個變數分別是奇數的索引跟偶數的索引 ,一個 0 ,一個 1。
- 跑迴圈的時候我們對於取出來的內容判斷它是奇數還是偶數,然後分別累加索引,只是這邊累加是每次疊加 2 的數值,依序塞入,最後就回傳。
這樣就不用跑兩次迴圈,速度也有提升,看起來 code 也簡潔不少。
這個題目其實做法蠻多的.但是要寫得漂亮需要思考一下,好啦~這次解題分享到這邊啦,如果有更好的寫法再請下面留言跟我說~
最後
我有開設一個youtube的頻道,每個月不定時週六或日晚上直播跟技術或是經驗相關的分享,有興趣的朋友歡迎追蹤訂閱+小鈴鐺。
工商時間
線上課程 — 職人必修的 RWD 網頁入門班
線上課程 — JavaScript & TweenMax 動態特效速成實戰
線上課程 — 超越入門!Webpack 前端自動化開發
線上課程 — 現代 JavaScript 職人之路|入門篇
線上課程 — 現代 JavaScript 職人之路|中階實戰篇