问题描述
给定一个数组,将其中值为0的元素放到数组的后面,并且保持其他元素的相对位置不变,要求不使用额外的空间。
思路
不能使用额外的空间,则需要用到交换数组中的元素。只需要把数组后面的非0的元素与前面为0的元素交换,就可以了。进行一次遍历即可,代码如下。
代码
#include <iostream>
using namespace std;
int main()
{
int arr[1000];
int n;
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
int f0 = 0; //f0记做数组中第一个0的位置
while (arr[f0] != 0)
f0++;
for (int i = f0 + 1; i < n; i++)
{
if (arr[i] != 0)
{
swap(arr[f0], arr[i]);
f0++;
}
}
for (int i = 0; i < n; i++)
cout << arr[i] << ' ' << endl;
return 0;
}
这篇博客讨论了如何在不使用额外空间的情况下,将一个数组中的所有值为0的元素移动到数组的后面,同时保持其他元素的相对位置不变。作者提出通过遍历数组并交换0元素与其后的非0元素来实现这一目标。

4607

被折叠的 条评论
为什么被折叠?



