• 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这道题。

  • 相关阅读:
    leetcode-62-Unique Paths
    [leetcode-64-Minimum Path Sum]
    [leetcode-198-House Robber]
    [leetcode-120-Triangle]
    [leetcode-53-Maximum Subarray]
    [leetcode-303-Range Sum Query
    [leetcode-123-Best Time to Buy and Sell Stock III]
    绑定下拉框
    解决URL参数中文乱码
    html 图片拖动不出来的脚本
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7652704.html
Copyright © 2020-2023  润新知