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++;
}
}
};