春雨天下笔试面试

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

三位面试官,第一位是曾伯毅(CTO)。

1、反转字符串,例如"I am a student"转成"student a am I" ,不许使用字符串的高级方法和函数。

a、使用额外储存空间,一个stack。首先遍历求出字符串的长度,然后从末尾开始遍历,将单词push入栈,然后遇到空格后,将栈全部pop清空。

b、 定义两个函数,int  length()和void  reverse(),首先将所有字符反转,然后将倒序的单词反转。

    这种方法不需要借助额外的空间,但是效率不如a高。

 

2、快速排序的partition函数

    略 

 

3、修改partition函数,将小于key,等于key和大于key的元素分开 (时间复杂度)

这个问题要考虑周全,无法在事先得知整个数组中有多少个等于key的元素,要保证出现多个等于key值的元素后,仍然可以正常终止循环。  

 

4、二叉树的中序遍历

 

5、将二叉树的中序遍历的结果改为双向链表 

加深对递归的理解,即先将整个二叉树从树抻成链,再将其与root结点相连。

 

6、 将一个双向链表倒转,返回倒转后的头结点,注意各种边界条件。

三个指针prv,cur和next。指定cur之后,判断prv和next的存在性。 

 

 

还有电话面试的两道题

1、什么是多态?什么时候使用多态?

2、如何找到两个数组中的重复元素? 

两种情况:有序数组和无序数组

       有序: 

两个指针直接比较遍历 O(n)

       无序:

hashing算法  O(n)无需额外空间

字符统计counting 需要额外空间 

 

本文是在Evernote上编辑的~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值