给定一个无序数组,里面包含 0,非 0 数字 需要按照原来的顺序排列,0 移动到最后
思路 遇到 0 的话, i 往前走,j 不动 遇到 非0 的话 ,ary[i] 与 ary[j] 进行交换,j 就是最后一位不为 0 的 下标 然后 继续遍历,从 j 开始,换成 0
let ary = [1, 2, 0, 3, 4, 0];
function moveZero(ary) {
let j = 0;
for (let i = 0; i < ary.length - 1; i++) {
if (ary[i] !== 0) {
ary[j++] = ary[i];
}
}
for (let i = j; i < ary.length; i++) {
ary[i] = 0;
}
console.log(ary, j);
}
moveZero(ary);
2022.5.14 添加新的思路
原理就是 遇到
0的时候,j++,当遇到非0的时候,当前值与 第一个值为0的进行交换,然后当前值 变成0
let ary = [1, 2, 0, 3, 4, 0];
function moveZero(ary) {
let j = 0;
for (let i = 0; i < ary.length - 1; i++) {
if (ary[i] == 0) {
j++
}else if(j!=0){
ary[i-j] = ary[i]
arr[i] = 0
}
}
return ary
}
moveZero(ary);
- note:思路出自 www.bilibili.com/video/BV16q… *