2017-10-11第二次万革始面经
今天上午进行了万革始的第二次面试,总结起来就是很差。。。。。。。到了晚上写面经心里还是不舒服!
下面首先记下流水账:10点25开始面试,早上8点50就到实验室准备了,说了下自我介绍,面试前很紧张,看以前写的博客感觉也看不进去,就看火影去了,开始面试,是面试官口述英语,很多不明白,题目是给定两个字符流,s1 = "1234",s2 = "5678",然后计算1234 + 5678 后的结果,以字符串的形式输出。
题目我开始就想到字符串转整数,然后相加这种思路。想了半天才知道是大整数相加,这是剑指offer上的第12题后面的扩展题目,结果自己根本没做过,而且发现自己平常就有一些不好的习惯。经常打错字,比如符号写错,变量写错,很多情况下都是这种小bug导致自己的程序错误,这次也是一样。比如下面的第一题程序。
1 #include<iostream> 2 #include<string.h> 3 4 using namespace std; 5 #define MAXSIZE 10000 6 void bigNumPlus(char* number1,char*number2){ 7 char *sum = new char[MAXSIZE + 2]; 8 int len1 = strlen(number1); 9 int len2 = strlen(number2); 10 int maxLen = len1 > len2 ? len1 : len2; 11 char* temp1 = new char[maLen + 1];//!!!!这里maxLen打错了 12 char* temp2 = new char[maxLen + 1]; 13 memset(temp1,'0',maxLen); 14 temp1[maxLen] = '\0'; 15 16 memset(temp2,'0',maxLen); 17 temp2[maxLen] = '\0'; 18 19 int nSum = 0; 20 int isCarryBit = 0; 21 int isOverflow = 0; 22 int i = 0,j = 0; 23 //反转字符串reverse 24 for(i = len1 - 1;i >= 0;--i){ 25 temp1[j++] = number1[i]; 26 } 27 temp1[j] = '\0'; 28 j = 0; 29 for(i = len2 - 1;i >= 0;--i){ 30 temp2[j++] = number2[i]; 31 } 32 //plus 33 for(i = 0;i < maxLen;++i){ 34 nSum= temp1[i] -'0' + temp2[i] -'0' + isCarryBit; 35 ////进位 36 if(nSum > 9){ 37 if(i = maxLen - 1){//!!!这里应该是== 38 isOverflow = 1;// 39 } 40 isCarryBit = 1; 41 sum[i] = nSum - 10 + '0'; 42 } 43 else{ 44 isCarryBit = 0; 45 sum[i] = '0' + nSum; 46 } 47 } 48 if(isOverflow){ 49 sum[maxLen++] = '0' + isCarryBit; 50 } 51 sum[maxLen] = '0'; 52 //////output 53 for(i = maxLen = 1;i >= 0;--i){//这里应该是maxLen - 1; 54 cout << sum[i]; 55 } 56 } 57 int main(){ 58 char* number1 = new char[MAXSIZE + 1]; 59 char* number2 = new char[MAXSIZE + 1]; 60 number1 = new char[MAXSIZE + 1]; 61 number2 = new char[MAXSIZE + 1]; 62 gets(number1); 63 gets(number2); 64 bigNumPlus(number1,number2); 65 66 67 }
要将剑指offer上所有的题目以及扩展题目都要弄懂。
写完程序一定要检查一下常识性错误,变量,判断条件-,=,==。
第二题没有时间做了,就叫我说下思路,是大整数的乘法,计算机算法设计上的原题,
做完之后自己很沮丧,但是还是需要调节自己的心态,每次笔试面试都需要总结出自己不懂的地方,进行相应的提高,不断补齐自己的短板才能调高,为了自己的终极目标前进。
笔试呢我觉得首先想暴力稳妥的方法,然后在想着提高,往复杂度这方面去想,这次对于list是双向链表不熟悉,主要就是实现一个数据结构,能够找到目前输入的最大值(也是搞一个最大list,每次比较头尾两端就行,因为头尾就是最大值),reverse,头尾插入和删除。对应剑指offer上的minStack这道题。