zoukankan      html  css  js  c++  java
  • 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这道题。

  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7652704.html
Copyright © 2011-2022 走看看