int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int
Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。

尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路

注:我的方法的复杂度为O(n),大家如果有其它方法希望可以交流一下。

/*

    Blog:

        http://blog.csdn.net/jiangxinnju

   

*/

#include <iostream>

#include <random>

using namespace std;

#define ARRAYSZIE 100

int Func(int* A,int nSize)

{

    int *p_zero = A; //指向最开始的零值

    int *p_unzero = A; //指向最后的非零值

    while(1)

    {

        for(int i=(p_zero-A); i<nSize; i++)

        {

            if(A[i] == 0) //找到第一个零值

            {

                p_zero = &A[i];

                break;

            }

            if(i == nSize-1) //没有找到零值,说明全部为非零值

            {

                return -1;

            }

        }

for(int i=(p_zero-A+1); i<nSize; i++)

        {

            if(A[i] != 0) //找到零值之后的第一个非零值

            {

                p_unzero = &A[i];

                break;

            }

            if(i == nSize-1) //没有找到下一个非零值,说明全部为零值,或者已经排序完毕

            {

                return (p_zero-A);

            }

        }

*p_zero = *p_unzero;

        *p_unzero = 0;

        p_zero++;

    }

}

void test_exercise001()

{

    int A[ARRAYSZIE];

    default_random_engine e;

    uniform_int_distribution<> d(0,1);

    for(int i=0; i<ARRAYSZIE; i++)

    {

        A[i] = d(e); //随机产生0和1值

    }

    for(int i=0; i<ARRAYSZIE; i++)

    {

        cout << A[i] << " ";

    }

    cout << "\nThe position of the first zero is: " << Func(A,ARRAYSZIE) << endl;

    for(int i=0; i<ARRAYSZIE; i++)

    {

        cout << A[i] << " ";

    }

}

华为面试题——一道关于指针方面的编程题(C/C++)的更多相关文章

  1. 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

    只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...

  2. C语言面试题大汇总之华为面试题 Eddy整理

    1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...

  3. 牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  4. C/C++笔试题(编程题)

    面试过程中遇到的编程题整理,于此备录.分享,共勉.(持续更新中......欢迎补充) (1)用户输入M, N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出.写出C程序. 程序代码如下: ...

  5. 百道Python面试题实现,搞定Python编程就靠它

    对于一般的机器学习求职者而言,最基础的就是掌握 Python 编程技巧,随后才是相关算法或知识点的掌握.在这篇文章中,我们将介绍一个 Python 练习题项目,它从算法练习题到机试实战题提供了众多问题 ...

  6. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  7. Android(java)学习笔记188:关于构造代码块,构造函数的一道面试题(华为面试题)

    1.源码是: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System.o ...

  8. Android(java)学习笔记131:关于构造代码块,构造函数的一道面试题(华为面试题)

    1. 代码实例: package text; public class TestStaticCon { public static int a = 0; static { a = 10; System ...

  9. Random随机类(11选5彩票)BigInteger大数据类(华为面试题1000的阶乘)

    先上Java Web图 为了简化叙述,只写Java代码,然后控制台输出 使用[Random类]取得随机数 import java.util.Random; public class Fir { pub ...

随机推荐

  1. centOS6.5安装SUN-jdk7

    一.下载SUN-JDK1.7.tar.gz文件他 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1 ...

  2. qbxt十一系列一

    希望[题目描述]网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”.“后退栈”.这里你需要实现以下几个功能:BACK: 如果“后退栈”为空则忽略此命令. 否则将当前两面压入“ ...

  3. PostGIS_导入shp格式的数据

    1.导入shp到PostGIS 开启PostGIS shp Loader,如下图: 打开View connection details....输入连接数据库的参数,如下: 连接成功后,点击Add Fi ...

  4. duilib -- Label控件的bug(转载)

    转载:http://blog.csdn.net/rundll64/article/details/24823809?locationNum=6&fps=1 发现LabelUI的[属性列表.XM ...

  5. .Net用户控件

    用户控件用户控件是个什么东西?自定义的反复重用的控件集合 好处?1.代码重用2.结构良好3.分工开发4.局部缓存 难点:一.交换信息: 注意信息的交换只在相邻层之间进行交换,如果是嵌套交换信息除Ses ...

  6. 解决HtmlAgilityPack无法获取form标签子节点的问题

    问题描述 今天使用HtmlAgilityPack提取Form表单下的input节点,发现提取的form节点没有子节点,InnerHtml也是为空,起初以为是标签不全导致,后来分析html代码发现不可能 ...

  7. Margin and Padding in Windows Forms Controls

    https://msdn.microsoft.com/en-us/library/ms229627.aspx Margin and Padding Precise placement of contr ...

  8. How do I reset Windows Update components?

    https://support.microsoft.com/en-us/kb/971058 Download and run the Windows Update Troubleshooter for ...

  9. linux 中的快捷键

    终端快捷键 tab=补全 ctrl+a=开始位置 ctrl+e=最后位置 ctrl+k=删除此处至末尾所有内容 ctrl+u=删除此处至开始所有内容 ctrl+d=删除当前字母 ctrl+w=删除此处 ...

  10. MyBatis Mapper 接口如何通过JDK动态代理来包装SqlSession 源码分析

    我们以往使用ibatis或者mybatis 都是以这种方式调用XML当中定义的CRUD标签来执行SQL 比如这样 <?xml version="1.0" encoding=& ...