Featured image of post 算法训练——移动零

算法训练——移动零

算法练习题

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

1
2
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

1
2
输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶: 你能尽量减少完成的操作次数吗?


解题过程

思路

这道题目与删除有序数组中的重复项的思路类似。

定义两个数组下标fast,slow,

fast来遍历数组,当fast不为0时,替换两个下标对应的值,然后slow自增。

这样就能实现题目的要求。

代码实现

C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
void moveZeroes(int* nums, int numsSize) {
    int fast = 0, slow = 0;
    for (; fast < numsSize; fast++)
        if (nums[fast] != 0) {
            int tem = nums[fast];
            nums[fast] = nums[slow];
            nums[slow] = tem;
            slow++;
        }
}

Java(与上面类似)

不再赘述。

使用 Hugo 构建
主题 StackJimmy 设计
math: 算法训练——移动零