283. Move Zeroes
Leetcode 問題: 283. Move Zeroes
Categories:
題目
Given an integer array
nums
, move all0's
to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
傳入一個整數陣列 nums
,將所有的 0
移動到右方尾巴
但必須要保持原本的 非 0
數字維持他原本的排序
,且不能用複製陣列
的方式,必須直接修改原本陣列值
Example
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Input: nums = [0]
Output: [0]
演算法
1. 設定存放左方非 0
整數指標位置
因為原本條件,所有的 0
移動到右方 = 所有的 非0
移動到左方
所以可以依序
找到所有 非 0
的整數,然後將他交換放到 左方非 0 整數指標
因為是依照陣列順序去執行,所以原本整數陣列 nums
的非 0
整數順序也不會被改到,會依序地放入
答案
JavaScript
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
function moveZeroes(numsList) {
var _a;
// 左方非 0 整數指標
var leftNonZeroNumberPointer = 0;
for (var i = 0; i < numsList.length; i++) {
// 目前整數
var currentNumber = numsList[i];
if (currentNumber != 0) {
// 當檢查到的整數不是 0,將整數交換移動到左方
_a = [numsList[i], numsList[leftNonZeroNumberPointer]], numsList[leftNonZeroNumberPointer] = _a[0], numsList[i] = _a[1];
// 繼續找下一個非 0 整數
leftNonZeroNumberPointer++;
}
}
}
TypeScript
/**
Do not return anything, modify nums in-place instead.
*/
function moveZeroes(numsList: number[]): void {
// 左方非 0 整數指標
let leftNonZeroNumberPointer = 0;
for (let i = 0; i < numsList.length; i++) {
// 目前整數
let currentNumber = numsList[i];
if (currentNumber != 0) {
// 當檢查到的整數不是 0,將整數交換移動到左方
[numsList[leftNonZeroNumberPointer], numsList[i]] = [numsList[i], numsList[leftNonZeroNumberPointer]];
// 繼續找下一個非 0 整數
leftNonZeroNumberPointer++;
}
}
};