移动零

给定一个数组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;
}
04-16 06:23