zoukankan      html  css  js  c++  java
  • 华为面试题——一道关于指针方面的编程题(C/C++)

        int A[nSize],当中隐藏着若干0,其余非0整数。写一个函数int Func(int* A, int nSize),使A0移至后面。非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 << " The position of the first zero is: " << Func(A,ARRAYSZIE) << endl;
        for(int i=0; i<ARRAYSZIE; i++)
        {
            cout << A[i] << " ";
        }
    }

  • 相关阅读:
    解决PKIX:unable to find valid certification path to requested target 的问题
    Linux 上的常用文件传输方式介绍与比较
    用VNC远程图形化连接Linux桌面的配置方法
    红帽中出现”This system is not registered with RHN”的解决方案
    linux安装时出现your cpu does not support long mode的解决方法
    CentOS SSH配置
    es6扩展运算符及rest运算符总结
    es6解构赋值总结
    tortoisegit安装、clon、推送
    es6环境搭建
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6739331.html
Copyright © 2011-2022 走看看