整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
来源:互联网 发布:sql 时间转换 编辑:程序博客网 时间:2024/05/18 13:31
在
整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
有朋友提到如果输入1111111,效率非常低,确实是这样,诸如这样的还有10998765,,99876543,
这个建议提的非常好,现在把算法做了优化,欢迎好心朋友不吝赐教,一起探讨。
分析:
对于111111,这样的,输出结果要求是不重复数,那自然前2为应该是12,而后面的就应该是0和1来填充,就不用循环取数来判断是不是不重复数了。基于这个思路实现如下:
//给定任意一个正整数,求比这个数大且最小的“不重复数”“不重复数”的含义是相邻两位不相同,//例如1101是重复数,1231是不重复数。int GetMinNum(int nNum){char Temp[20];char OutTemp[20];int nLen;int i,j, k;int nTemp;int nCount =0;//先判断一下nNumitoa(nNum, Temp, 10);nLen = strlen(Temp);for (i=0; i<nLen-1; i++){//处理输入串里是重复数的情况if (Temp[i]==Temp[i+1]){if (i==0){//998765if (Temp[i]=='9'){strcpy(OutTemp, "10");for (j=1; j<nLen; j++){OutTemp[j+1] = (j%2)+'0';}}//889765else{OutTemp[0] = Temp[i];OutTemp[1] = Temp[i]+1;for (j=2; j<nLen; j++){OutTemp[j] = (j%2)+'0';}}}else{for (k=0; k< i; k++){OutTemp[k] = Temp[k];}//10998765if (Temp[i]=='9'){OutTemp[i-1] = Temp[i-1]+1;if (i>2){if (OutTemp[i-1] == OutTemp[i-2]){Temp[i-1]+1;}}for (j=i; j<nLen; j++){OutTemp[j] = (nCount%2)+'0';nCount++;}}//1088765else{OutTemp[i] = Temp[i];OutTemp[i+1] = Temp[i+1]+1;for (j=i+2; j<nLen; j++){OutTemp[j] = (nCount%2)+'0';nCount++;}}}return atoi(OutTemp);}}for (i = nNum+1; ;i++){itoa(i, Temp, 10);nLen = strlen(Temp);for (j=0; j<nLen-1; j++){//有重复,跳出循环。if (Temp[j]==Temp[j+1]){break;}}//没有重复,返回i。if (j==nLen-1){return i;}}return 0;}
有兴趣的朋友也可以把上面的函数进行拆分一下,确实有一点长,是吧。
测试代码:
int main(){int nTemp;int nRet;while(1){scanf("%d", &nTemp);if (nTemp==9999){break;}else{nRet = GetMinNum(nTemp);cout << nRet << endl;}}return 0;}
测试结果就不贴了,大家多试试吧。
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12191043
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”[2014百度笔试题]
- (百度笔试题)给定任意一个正整数,求比这个数大且最小的“不重复数”。
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 程序设计题--给定任意一个正整数,求比这个数大且最小的“不重复数
- 给定任意一个正整数,求比这个数大且最小的不重复数,“不重复数”的含义是相邻两位不同(java写的)
- 2014百度研发真题及其解析-求比指定数大且最小的“不重复数”
- 整型数组处理算法(十)给定数组a[n],其中有超过一半的数为一个定值,找出这个数。[2014人人网笔试题]
- [经典面试题][百度]求比指定数大且最小的“不重复数”
- 算法:求比指定数大且最小的“不重复数”问题的高效实现
- 求比给定正整数N的最小不重复数(度娘)
- 给出任意一个正整数,算出大于它的最小不重复数——最高效[2014百度笔试题]
- 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
- 给定任意一个整数,找出比当前这个数大的最小的10个素数之和。
- 百度面试题 求比N大的最小“不重复数”
- 最小不重复数(百度笔试题)
- 给定一个数,要求输出比它大的最小的非重复数
- eclipse的console无法正确显示ANSI的颜色字体的问题
- [MySQL] ERROR 2002(HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.
- Cannot open source file: 'C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\APPMODUL.CPP': No
- poj Permutation Code (模拟)
- 黑马程序员——浅谈java中的内部类<三>
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 形形色色的软件生命周期模型(4)——MSF、实用型
- GDI+真难用
- 央视爆光微信打飞机流量门事件的思考
- MySQL 中文显示乱码
- popover典型问题:Popover with embedded navigation controller doesn't respect size on back nav
- MIPS Address Space
- LeetCode:Gas Station
- ubuntu12.04搭建android开发环境