我今天预约了微软的面试。 连续三次,一次持续一个小时,从下午2点到下午5点。 虽然感觉自己最后的回答很差,但是还是分享一下面试过程,作为参考吧
第一回合:自我介绍项目介绍
开始问题:合并k个链表
解决问题的想法:两个合并(调查分治方法) ) ) ) )
第二次:自我介绍项目介绍
开始问题。 1 .如何判断平衡树2 .颜色分类(按顺序排列0、1、2 ) )。
问题1解题思路:采用递归方法判断子树是否为平衡树(如果是,返回子树高度; 如果不是返回-1)
问题2解题思路: LeetCode原题,采用双指针
第三:自我介绍项目介绍
出题:1.实现单实例模式2 .在2. String中转动数字。 如果有特殊字符,则返回null,否则返回数字。 (考虑正负情况) ) ) ) ) ) ) ) )。
问题1解题思路:使用静态内置类实现单实例模式(饿汉模式)
来自公共类singleton {//类的静态变量privatestaticsingletoninstance=new singleton (; //初始化自动创建实例,静态和私有避免私有singleton () }//构造函数publicstaticsingletongetinstance ) )//实例方法静态修饰静态)问题2解题思路:需要考虑各种特殊情况,主要考察你对问题的考虑是否周到
是否为空,或是否由空间组成。
是否带有加号和减号,加号可以忽略。 负号必须在返回结果时带上。
必须以0开始,并跳过连续的前置0。 例如,如果为' 000123 ',则转换结果为123。
超出了Integer的最大边界或最小边界。
小数点可以忽略。 因为转换为整数类型,所以小数点以下的数字会被截断。
出现多个正负符号,直接返回0。 例如,“2”,结果为0。
第一位只有数字(0到9 )或正负符号,出现其他字符后直接返回0。
publicintmyatoi3(stringstr ) if ) str==null ) { return 0; } str=str.trim (; if(str.isempty () ) { return 0; (} int index=0,total=0,n=str.length ); int sign=1; //只判断正负//一次,循环if(indexn(str.charat ) index )=''|str.charat(index )=='-' ) ) sign=str.charat 索引; //整数while(indexn ) intnum=str.charat ) index )-'0'; if(num0|||num9) { break; //避免越界if (total integer.max _ value/10|) total==integer.max _ value/10 num integer.max _ value ) ) retue }总=总* 10 num; 索引; }返回总* sign; }