Move Zeroes
Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example:
|
|
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
提示 | 解題應用 |
---|---|
TwoPointers | Index Value |
Default:
|
|
解答思路:
最初想使用bubble sort或直接將0的元素從最後頭位置互換,可惜此題除了0之外的其它元素還要保留相對位置,所以就改用其它方式來處理,當發現元素為0時先暫存其index值,直到發現下一個非0的元素才互換位置,最後才從原本發現0位置的下一項繼續重覆上述動作。
程式碼解說:
首先以一flag值來表示目前遍歷陣列所到達的位置,直到其index值超出陣列為止,此時一邊一一確認是否該元素的值為0且先前取出的元素都不為0,如果是的話就記錄0的位置並確認0存在,接著便繼續往下並再次確認是否先前有0存在且這次值不為0,如果也符合條件的話,就可以將先前記錄index位置的0與此index位置的其值互換,最後記得將zero改回false,並把flag值指回原本發現值為0的index位置,繼續再重新尋找下一個值為0的元素
|
|
完整程式碼:
|
|
總結:
在一陣列中如需要將特定元素移至最後頭,若不需在意原本陣列值的相對位置,可使用bubble sort或直接將特定元素與最後頭儲存的值互換。若要考量相對位置的關係則可以先暫存其特定元素的index值,直到發現下一個非該元素才互換位置,並從原本該index值的下一項繼續檢查並重覆上述動作。