写点什么

力扣(Leetcode)练习 -- 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

用户头像
Wynne
关注
发布于: 2020 年 11 月 19 日
力扣(Leetcode)练习--给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

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

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。


两种方法,第一种符合原要求和说明;第二种不符合原说明中的【不能拷贝额外的数组】,利用了两个数组,但是可以输出正确结果。

方法一:

主要思路:在原数组中进行循环,循环到非 0 数字,赋值给数组第一位,循环到第二个非 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;k<5;k++){        cout<<nums[k]<<",";            }    cout<<"]";}
复制代码


方法二:

主要思路:利用一个新数组,在原数组中循环,循环到非 0 数字,依次赋值给新数组。

#include <iostream>using namespace std;int main() {    //定义两个数组,一个原数组,一个空数组,最终输出的是数组b(原题目中的nums)    int a[5] = {0,1,0,3,12};    int b[5]={0,0,0,0,0};    //count位用来标记数组b中的位置    int count = 0;    //数组a中循环,如果是非0,就提取出来,依次放在数组b中    for (int i=0;i<5;i++){        if(a[i]!=0){	        b[count] = a[i];	        count+=1;	    }    }    //原本只能输出一堆数字,为了保持数组的格式,手动加了[]和,    cout<<"[";	for(int j=0;j<5;j++){	   cout <<b[j]<<",";	}    cout<<"]";}
复制代码


1)C++在线编译器结果:

在线编译器地址:http://www.dooccn.com/cpp/

2)力扣(Leetcode)运行结果:




ps.尚未找到输出数组(带格式)的好方法,如果有合适方法,希望能告知~

发布于: 2020 年 11 月 19 日阅读数: 82
用户头像

Wynne

关注

每个病人都怕努力了半天又回到起点 2020.11.17 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
没有合适的输出方法,手动把逗号写了进去,上面的代码多了个逗号,这个输出结果与期望完全一致:
//定义原数组
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< //int m=0;
if(m<4){
cout<<",";
m+=1;
}
}
cout<<"]";
展开
2020 年 11 月 20 日 09:15
回复
没有更多了
力扣(Leetcode)练习--给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序