| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2001 人关注过本帖
标题:将数组中所有的0挪到数组的末尾
取消只看楼主 加入收藏
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
将数组中所有的0挪到数组的末尾
朋友购买《C Primer Plus》第六版进入邮电出版社的异步社区微信群,群里给出的题目。此题的C程序我会写,但从给出答案来看,感觉要用C++来写,故来论坛求助,请按给出的答案格式用C++编写程序,谢谢!
【每日一练 第17天】
给定一个数组nums,写一个函数,将数组中所有的0挪到数组的末尾,而维持其他所有非0元素的相对位置。
举例: nums = [9,0,0,0,10,0,0,0,11,0,12,0,13,0,14,0,15,0,16,0],函数运行后结果为[9,10,11,12,13,14,15,16,0,0,0,0,0,0,0,0,0,0,0,0]

第17天答案:
思路:创建一个临时数组nonZeroElements,遍历nums,将nums中非0元素赋值到nonZeroElements中,而后按顺序将nonZeroElements赋值到nums上,未遍历的元素置0;

代码如下:
1// 时间复杂度: O(n)
2// 空间复杂度: O(n)
3class Solution {
4public:
5    void moveZeroes(vector<int>& nums) {
6
7        vector<int>
nonZeroElements;
8
9        // 将vec中所有非0元素放入nonZeroElements中
10        for(int i = 0 ; i <  nums.size() ; i ++)
11            if(nums[ i ])
12
nonZeroElements.push_back(nums[ i] );
13
14        // 将nonZeroElements中的所有元素依次放入到nums开始的位置
15        for(int i = 0 ; i < nonZeroElements.size() ; i ++)
16            nums[ i ] = nonZeroElements[ i ];
17
18        // 将nums剩余的位置放置为0
19        for(int i = nonZeroElements.size() ; i < nums.size() ; i ++)
20            nums[ i ] = 0;
21    }
22};
搜索更多相关主题的帖子: 答案 元素 数组 int size 
2020-10-24 00:44
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
C程序如下:

程序代码:
#include<stdio.h>
#define n 20
int main()
{
    int i,j,nums[n] = {0};
    for(i = 0;i < n;i++)
    {
        scanf("%d",&nums[i]);
    }

    for (i = 0;i < n;i++)
    {
        if(nums[i] == 0)    // 检测到数组中的0,其后的非0数据均前移
        {
            for(j = i + 1;j < n -1;j++)
            {
                if(nums[j] != 0)
                {
                    nums[i] = nums[j];    // 检测到非0,移到前面去填充 i 位置的0
                    nums[j] = 0;    //数据移走之后,该位置用0来填充,防止后面的循环再次读到
                    break;
                }
            }
        }
    }

    for(i = 0;i < n;i++)
    {
        printf("%d ",nums[i]);
    }
    printf("\n");
}


[此贴子已经被作者于2020-10-24 00:49编辑过]

2020-10-24 00:46
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 3楼 rjsp
谢谢!

第17行出错,我在编译选项添加 -std=c++11 或者 -std=gnu++11 也没有用:

In function 'void foo_cpp(T (&)[N])':

[Warning] lambda expressions only available with -std=c++11 or -std=gnu++11

In instantiation of 'void foo_cpp(T (&)[N]) [with T = int; unsigned int N = 20u]':

required from here

[Error] no matching function for call to 'stable_partition(int [20], int*, foo_cpp(T (&)[N]) [with T = int; unsigned int N = 20u]::<lambda(int)>)'

[Note] candidate is:

In file included from C:/Program Files/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/algorithm

lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_algo.h    [Note] template<class _BIter, class _Predicate> _BIter std::stable_partition(_BIter, _BIter, _Predicate)

lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\bits\stl_algo.h    [Note] template argument deduction/substitution failed:

In substitution of 'template<class _BIter, class _Predicate> _BIter std::stable_partition(_BIter, _BIter, _Predicate) [with _BIter = int*; _Predicate = foo_cpp(T (&)[N]) [with T = int; unsigned int N = 20u]::<lambda(int)>]':

required from 'void foo_cpp(T (&)[N]) [with T = int; unsigned int N = 20u]'

required from here

[Error] template argument for 'template<class _BIter, class _Predicate> _BIter std::stable_partition(_BIter, _BIter, _Predicate)' uses local type 'foo_cpp(T (&)[N])
[with T = int; unsigned int N = 20u]::<lambda(int)>'

[Error] trying to instantiate 'template<class _BIter, class _Predicate> _BIter std::stable_partition(_BIter, _BIter, _Predicate)'
2020-10-24 12:41
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 5楼 rjsp
没错,我用的是DEV_C++5.11 TDM GCC4.9.2
2020-10-24 23:26
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 7楼 rjsp
好像是输出了两次
2020-10-25 00:44
风过无痕1989
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:8
帖 子:228
专家分:1050
注 册:2020-7-17
收藏
得分:0 
回复 7楼 rjsp
我去掉你代码最后的三行,输出正常了

[此贴子已经被作者于2020-10-26 02:15编辑过]

2020-10-25 01:37
快速回复:将数组中所有的0挪到数组的末尾
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021132 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved