面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
来源:互联网 发布:什么是挂机软件 编辑:程序博客网 时间:2024/06/07 14:56
题目:int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
这是今天看到的一到面试编程题,题目算是简单一些,读完题目至少在思路还编码上还是比较有把握的,不借助辅助空间这一点没问题,考虑效率这个就要用到一个巧字了,一般这个我是想不到的,所以这次我先尝试自己把代码写出来然后看看人家是怎么写的,对比着看,这样可以修炼提升自己的内力!
我自己编的测试程序:
#include <stdio.h>#include <string.h>#include <stdlib.h>int Func(int * A, int nSize);int Swap(int* a, int* b);int InsertSort(int * array, int size); int main(void) { int i; int A[13] = {4, 1, 0, 6, 0, 9, 2, 0, 0, 3, 8, 5, 7};//int A1[13] = {0, 1, 0, 6, 0, 9, 2, 0, 0, 3, 0, 0, 0};int pos = -1;printf("A[]: ");for(i = 0; i < 13; i++){printf(" %d, ", A[i]);}printf("\n");pos = Func(A, 13);printf("A[]: ");for(i = 0; i < 13; i++){printf(" %d, ", A[i]);}printf("\n");printf("pos = %d\n", pos);system("pause"); return 0;} int Func(int * A, int nSize){int ret = -1;int i = 0; /* 表示第一个元素的下标 */int j = nSize - 1; /* 表示最后一个元素的下标 */static flag = 1;ret = (A != NULL) && (nSize > 0);if(ret){//1. 首先判断第一个元素是否为0while(A[i] == 0){ret = i;Swap(&A[i], &A[j--]);//交换a[i] a[j]的值 直到a[0]位置不为0 } while( i != j)//第一个元素不为0 {i++;if(A[i] == 0){if(flag == 1)//标记第一次出现0的位置 {ret = i;flag = 0;}//如果下一个元素为0则先交换while(A[i] == 0){Swap(&A[i], &A[j--]);//交换a[i] a[j]的值 直到a[0]位置不为0 } }InsertSort(A, i+1);//对前面的数字进行插入排序 }}return ret;}int InsertSort(int * a, int size){int ret = -1;int i = 0, j = 0;int Temp = 0;ret = (a != NULL) && (size > 0);if(ret){//插入排序 for(i = 1; i < size; i++){if( a[i-1] > a[i] ){Temp = a[i];for(j = i - 1; (j >= 0) && (Temp < a[j]); j-- ){a[j+1] = a[j];//向后挪 }a[j+1] = Temp;}}}return ret;} int Swap(int* a, int* b){int ret = -1;int c = 0;ret = (a != NULL) && (b != NULL);if(ret){c = *a;*a = *b;*b = c;}return ret;}
运行效果截图:
上面的编程思路完全是满足题目要求,不过总觉得效率问题总有点欠缺!比如排序用的是插入排序,那个地方绝对可以做个优化!
刚看了别人写的!居然不用排序!题目中保持有序也不知道到底用不用排序!难道是我理解错了???而且用的插入排序也是稳定排序!算是复习了下插入排序吧!
0 0
- 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至 数组前面并保持有序,返回值为原数据中第一个
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至后面
- int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至
- 写一个函数int Func(int* A, int nSize), 使A把0移至后面,非0整数移至数组前面 并保持有序,返回值为原数据中第一个元素为0的下标。
- 给定一个数组,数组中包含若干个0,将0移至数组前面,其余的相对顺序保持不变
- 上海华为的一道关于指针方面的编程题 int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize)
- 将数组A中的0都移至数组末尾,将非0的移至开始(保持原来顺序)例子:1,2,0,2,3,0-->1,2,2,3,0
- 7.将0移至末尾
- 输入一个字符串,内有数字和非数字字符,例如:ab123fk456 98dds153?145f .将其中连续的数字字符作为一个整数,依次存放到一个整型数组a中。例如:123放在a[0],4
- 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数
- 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数
- C++ - 一个非递减数组,下标从0到n,元素的取值范围为从0到n的整数,判断其中是否有重复元素
- LeetCode-283:Move Zeroes (将数组中0元素移至尾部)
- 非整数数组索引
- 数组A包含0到n的所有整数,但其中缺了一个,且数组A里的整数都是用二进制形式存储,求这个缺失的整数
- 编程珠玑: 12章 取样问题 12.1程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复-------解题总结
- lua学习笔记一 -- 基本数据类型和操作符介绍
- Android Studio 插件之 Android ButterKnife Zelezny
- JAVA基础面试题目
- ERP自定义查询,可直接查MES站点数据
- 136. Single Number
- 面试编程题---其中隐藏着若干0,其余非0整数,使A把0移至后面,非0整数移至数组前面并保持有序
- .NET MVC标签扩展(checkbox,radio)
- 错误: 类A是公共的, 应在名为A.java 的文件中声明
- 融云头像问题
- Java实现MD5加密与解密
- Struts2 拦截器中实现对数据进行数据库操作
- Ubuntu12.04增加屏幕分辨率选项
- Eclipse 3.7手工安装Maven2的插件(包含POM图形编辑工具)
- 查找文件位置的方法-find,grep,locate