283.移动零

题目

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

示例: > 输入: [0,1,0,3,12] > 输出: [1,3,12,0,0]

说明: - 必须在原数组上操作,不能拷贝额外的数组。 - 尽量减少操作次数。

思路

既然要求在原数组上操作,并且要尽量减少操作,那说明就应该在一趟扫描中解决问题.

题目想要的是将0移到数组末尾,一个思路是在一趟扫描中,只要遇到0,就用后面不是0的数覆盖到这个0,覆盖完了之后,将数组后面的数字都设置成0.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void MoveZeroes(int[] nums)
{
int flag = 0;
foreach (int num in nums)
{
if (num != 0)
{
nums[flag] = num;
flag += 1;
}
}
for (int i = flag; i < nums.Length; i++)
{
nums[i] = 0;
}
}