将数组中的 0 移动到末尾
输入[1,0,12,0,13,0] 输出 [1,12,13,0,0,0] 只移动0 其他位置不变 在原数组进行操作
splice 实现
之前的对数组特点已经讲过, splice 类似与shift ,本生的时间复杂度位O(n),再加上数组的遍历,复杂度就是 O(n^2) 虽然不可取, 在这里 也实现下
splice 方式代码实现
function moveZero(arr:number[]): void {
const len = arr.length;
if (len===0) return;
let zeroLen = 0
for (let i=0; i<len-zeroLen; i++) {
if (arr[i] === 0) {
arr.push(0)
arr.splice(i,1)
i--
zeroLen++
}
}
console.log(arr)
}
moveZero([1,0,2,0,3,0])
双指针思路
双指针是解决嵌套循环的一种思路 可以创建两个指针 i j j指向第一个为0 的元素, i指向 j 后面第一个不为0 的元素,然后进行互换
双指针实现
function moveZero2(arr) {
var len = arr.length;
if (len === 0)
return;
var j = -1;
for (var i = 0; i < len; i++) {
if (arr[i] === 0 && j < 0) {
j = i;
}
if (arr[i] != 0 && j >= 0) {
var n = arr[i];
arr[i] = arr[j];
arr[j] = n;
j++;
}
}
console.log(arr);
}
moveZero2([1, 0, 2, 0, 3, 0]);
2周刷完100道前端优质面试真题 mu课 视频及资料领取请关注公众号:奋斗的刚子