要求:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
#include <iostream>
using namespace std;
int main() {
//定义原数组
int nums[5]={0,1,0,3,12};
int i = 0,j = 0;
//在数组中循环,当数字为非0时,将此数字赋值给数组第一位nums[0]
//循环到第二个非0数字时,赋值给数组第二位nums[1]
//j控制数组的赋值位,赋值后j自动加一,以便下一次的循环赋值
for(i = 0 ; i < 5; i++)
{
if(nums[i] != 0)
{
nums[j++] = nums[i];
}
}
//当循环完非0数字后,将所剩的位置,全部置0
while(j < 5)
{
nums[j++] = 0;
}
//暂时未找到输出数组的好方法,只能用循环来取数字并加格式[,,]
cout<<"[";
for(int k=0,m=0;k<5;k++){
cout<<nums[k];
//int m=0;
if(m<4){
cout<<",";
m+=1;
}
}
cout<<"]";
}
输出结果: