华为面试题——一道关于指针方面的编程题(C/C++)
时间:2022-04-25
本文章向大家介绍华为面试题——一道关于指针方面的编程题(C/C++),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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] << " ";
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- windows 认证机制
- 谷歌地球引擎python文档(GEE_python_API)
- react基础
- 基于ASP.NET Core 3.x的端点路由(Endpoint Routing)实现控制器(Controller)和操作(Action)分离的接口服务
- 流量转发映射
- 什么情况用ArrayList or LinkedList呢?
- 拒绝服务攻击
- 协议攻击(一)
- 百亿级图数据JanusGraph迁移之旅
- 协议攻击(二)
- 学不会设计模式,是因为你还没用过这个神奇的网站!
- windows域的创建
- 聊一下简易版的“Spring Boot”写的咋样了
- 手写“SpringBoot”近况:IoC模块已经完成
- 云上服务器安全