題目描述#
給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。
請注意,必須在不複製數組的情況下原地對數組進行操作。
示例 1:
輸入: nums = [0,1,0,3,12]
輸出: [1,3,12,0,0]
示例 2:
輸入: nums = [0]
輸出: [0]
提示:
1 <= nums.length <= 10^4
-2^31 <= nums[i] <= 2^31 - 1
思路#
- 最簡單的肯定是一次遍歷遇到 0 就放數組最後,否則直接拷貝,但是開辟了新的數組空間
- 可以用兩個指針,從左往右遍歷,遇到 0 則拿出來,放到數組末尾,且右指針往左挪一步,否則左往右移動
題解#
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
let l = 0, r = nums.length;
while (l < r) {
if (nums[l] === 0) {
nums.push(nums.splice(l, 1));
r--;
} else {
l++;
}
}
};