day146-LeetCode 283. 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, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

You must do this in-place without making a copy of the array.
Minimize the total number of operations.

分析

注意:只能是针对当前数组操作,不能是新增数组
将数组中遍历的非零元素依次递增标记,以0为初始值,最后将标记的值作为数组元素下标。
递增次数为非零元素个数,遍历完成之后,非零元素补零。

题解

function moveZeros (arr) {
let index = 0
// 标记所有非零元素
for (let i = 0; i < arr.length; i++) {
// n为非零元素
let n = arr[i]
if (n !== 0) {
arr[index++] = n
}
}
// 非零元素之外的元素补零
for (index; index < arr.length; index++) {
arr[index] = 0
}
}
文章作者: lmislm
文章链接: http://lmislm.com/2019/06/08/2019-06-08/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LMISLMのBlog