要求:
给定一个数组 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<<"]"; }
输出结果: