(58同城)2015笔试编程题
来源:互联网 发布:qq好友提取软件 编辑:程序博客网 时间:2024/05/16 14:29
void findMaxLen(BinTree root, int *maxLen) { //遍历到叶子结点,返回 if(root == NULL) return; //如果左子树为空,那么该节点左边最长距离为0 if(root->pleft == NULL) root->leftMaxValue = 0; //如果右子树为空,那么该节点右边最长距离为0 if(root->pright == NULL) root->rightMaxValue = 0; //如果左子树不为空,递归寻找左子树最长距离 if(root->pleft != NULL) findMaxLen(root->pleft, maxLen); //如果右子树不为空,递归寻找右子树最长距离 if(root->pright != NULL) findMaxLen(root->pright, maxLen); //计算左子树中距离根节点的最长距离 if(root->pleft != NULL) { if(root->pleft->leftMaxValue > root->pleft->rightMaxValue) root->leftMaxValue = root->pleft->leftMaxValue + 1; else root->leftMaxValue = root->pleft->rightMaxValue + 1; } //计算右子树中距离根节点的最长距离 if(root->pright != NULL) { if(root->pright->leftMaxValue > root->pright->rightMaxValue) root->rightMaxValue = root->pright->leftMaxValue + 1; else root->rightMaxValue = root->pright->rightMaxValue + 1; } //更新最长距离 if(root->leftMaxValue + root->rightMaxValue > *maxLen) *maxLen = root->leftMaxValue + root->rightMaxValue; }
#include <iostream>#include <string>using namespace std;char str[12][12];char *s("ABCD,AABCD,DOT,TDO,BCAD,ABCDA,TDO,BDCA,BCDAA,ZZZ,XB");//分配一个256大小的int数组即可,某个字符在str1中出现,则将int数组对应元素值加1;//某个字符在str2中出现,则将int数组对应元素值减去1,最后,只需要看int数组是否全为0int equal(char* str1,char* str2){ int len1=strlen(str1); int len2=strlen(str2); if(len1 != len2) return 0; int flags[256]; memset(flags,0,sizeof(flags)); int i; for(i=0;i<len1;++i){ ++flags[str1[i]]; --flags[str2[i]]; } for(i=0;i<256;++i){ if(flags[i]!=0) return 0; } return 1;}int main(){ int i,j=0,n,k=0,len=strlen(s); for(i=0;i<len;i++) { if(s[i]!=',') str[k][j++]=s[i]; else { k++;j=0; } } for(i=0;i<10;i++) { n=0; for(j=i+1;j<11;j++) { if(equal(str[i],str[j])&&strcmp(str[i],"")!=0) { if(n==0){ cout<<str[i]<<" "<<str[j]<<" "<<endl; n++; } else { cout<<str[j]<<" "<<endl; } //str[j]="00000000000"; strcpy(str[j],""); } } } return 0;}
#include <stdlib.h>//此段代码来源于网络上友人的#include <stdio.h>//将有序的X[s..u]和X[u+1..v]归并为有序的Z[s..v]void merge(int X[], int Z[], int s, int u, int v){ int i, j, q; i = s; j = u + 1; q = s; while( i <= u && j<= v ) { if( X[i] <= X[j] ) Z[q++] = X[i++]; else Z[q++] = X[j++]; } while( i <= u ) //将X中剩余元素X[i..u]复制到Z Z[q++] = X[i++]; while( j <= v ) //将X中剩余元素X[j..v]复制到Z Z[q++] = X[j++];}/* X[0..n-1]表示参加排序的初始序列* t为某一趟归并时子序列的长度* 整型变量i指出当前归并的两个子序列中第1个子序列的第1个元素的位置* Y[0..n-1]表示这一趟归并后的结果*/void mergePass(int X[], int Y[], int n, int t){ int i = 0, j; while( n - i >= 2 * t ) //将相邻的两个长度为t的各自有序的子序列合并成一个长度为2t的子序列 { merge(X, Y, i, i + t - 1, i + 2 * t - 1); i = i + 2 * t; } if( n - i > t ) //若最后剩下的元素个数大于一个子序列的长度t时 merge(X, Y, i, i + t - 1, n - 1); else //n-i <= t时,相当于只是把X[i..n-1]序列中的数据赋值给Y[i..n-1] for( j = i ; j < n ; ++j ) Y[j] = X[j];}void mergeSort(int X[], int n){ int t = 1; int *Y = (int *)malloc(sizeof(int) * n); while( t < n ) { mergePass(X, Y, n, t); t *= 2; mergePass(Y, X, n, t); t *= 2; } free(Y);}void print_array(int array[], int n){ int i; for( i = 0 ; i < n ; ++i ) printf("%d ", array[i]); printf("\n");}int main(){ int array[] = {65, 2, 6, 1, 90, 78, 105, 67, 35, 23, 3, 88, -22}; int size = sizeof(array) / sizeof(int); mergeSort(array, size); print_array(array, size); return 0;}
0 0
- (58同城)2015笔试编程题
- 2015 58同城 编程题
- 58同城2014校园招聘软件测试笔试题
- 58同城2014校园招聘笔试题
- 2016年58同城赶集笔试题
- 凑硬币(58同城2017校招笔试题)
- 2014-四川大学-58同城研发笔试
- k的倍数(同模相减-美团笔试编程题)
- 名企笔试:58同城2016研发工程师笔试题(算法问题)
- 58同城, 2017春招后端编程题
- 58同城产品类笔试题目_20131030
- 58同城2017秋招前端工程师笔试卷
- 最快速度求两个数组之交集算法(58同城二面笔试题)
- 【58同城2017年笔试题】找到局部有序的数组的最小值,复杂度为O(logn)
- 2015 TCL编程笔试题
- 京东2015 笔试 编程题
- 小米2015笔试编程题
- 笔试编程题(一)
- ARC与MRC的混合开发
- Sevlet-tomcat配置
- 一个简单的下载程序
- Cocos2d-x开发包的架构
- egrep的用法
- (58同城)2015笔试编程题
- POJ 1486 Sorting Slides(二分图必须边)
- 数据结构概述 第三章
- UVA 232 字符串处理
- 9种排序算法性能之比较之----归并排序
- BaseAnimation是基于开源的APP,致力于收集各种动画效果(最新版本1.3)
- vtk相机控制
- 小贝学习CSS边框与边界
- 测试