• 华为面试题——一道关于指针方面的编程题(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] << " ";
        }
    }

  • 相关阅读:
    git(重点)
    C#技巧记录——持续更新
    结点和节点的区别
    WebSocketSharp send record_stop without send record_start
    cefsharp 拦截所有请求 解决chunked导致数据接收不完整的问题
    计算mp3长度 毫秒
    pydub分割音频文件
    c# 获取文件信息
    实现一边写代码一边展示网页的效果
    c# webapi swagger Area 多级层次分组 添加header参数
  • 原文地址:https://www.cnblogs.com/jiangxinnju/p/5516890.html
Copyright © 2020-2023  润新知