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] = '';
15     
16     memset(temp2,'0',maxLen);
17     temp2[maxLen] = '';
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] = '';
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这道题。

原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7652704.html