移动零
给定一个数组nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意,必须在不复制数组的情况下原地对数组进行操作。
示例1:
输入:nums = [0,1,0,3,12]
输出:[1,3,12,0,0]
示例2:
输入:nums = [0]
输出:[0]
code方式1
let arr = [0, 1, 0, 3, 12];
function moveZeroes(nums) {
let len = nums.length;
let index = 0;
for(let i = 0; i < len; i++){
if(nums[i]){
if(index == i){
index++
}else{
nums[index++] = nums[i];
nums[i] = 0;
}
}
}
return nums;
}
console.log(moveZeroes(arr));
解题思路一:
// 定义一个名为moveZeroes的函数,接收一个数组参数nums
function moveZeroes(nums) {
// 获取输入数组nums的长度
let len = nums.length;
// 初始化变量index为0,用于记录非零元素在新数组中的插入位置
let index = 0;
// 遍历输入数组nums
for (let i = 0; i < len; i++) {
// 检查当前元素是否为非零值
if (nums[i]) {
// 情况1:若当前索引等于index,说明非零元素已在正确位置,只需递增index
if (index == i) {
index++;
}
// 情况2:若当前索引不等于index,需要将非零元素移到index处,并将原位置置零
else {
nums[index++] = nums[i]; // 移动非零元素并递增index
nums[i] = 0; // 将原位置置零
}
}
}
// 遍历结束后,返回处理后的数组nums,其中零元素已移动至末尾,非零元素顺序不变
return nums;
}