算法类面试题-2

31. [Microsoft] 如何高效地用堆栈模拟队列.

使用两个stack, s1和s2

Push时,push到s1

Pop时,若s2非空,则从s2中pop, 若s2为空,则将s1的全部元素pop到s2中,再从s2中pop

分摊复杂度为O(1)

 

32. [Microsoft] 打印中两个整数范围内的所有素数,例如:(12, 15) ->13

1. 单个验证是否为素数

2. 筛法

 

33. [Google] 求直方图的最大内接矩形

    TODO

 

34. [Google] NxN行列有序的矩阵查找一个数

两种方法,1从角上开始search, 2, Divide and Conquer

分治法可以用来解决另外一个问题,在行列有序的二维数组中,大于/小于0的元素有多少个?

35. [Google] 将MxN的矩阵转秩,要求O(1)的空间复杂度.参考群论中cyclic group,group
generator

TO LEARN

 

36. Inplace perfect shuffle

TO LEARN

 

37. 有一个矩阵A,找出这个矩阵中所有的A(i,j),它所在的行和列都是0.

依次扫描?略。。。

 

38. 有一个变长的characters system, 每个character所占的bytes数不固定。每个
character的最后一个byte的值是0. 一个字符串由这些变长的characters组成。字符串
的最后两个bytes是0. 要求反转这个字符串。额外空间使用越少越好。

先将整个字符串反转,再按个字符反转

 

39. 有n张扑克牌,从中随机选出几张。要求找出所有的选法,使得所选扑克牌的点数的
和是s. 不用recursion,代码行数越少越好。

TODO 如何不用recursion?

 

40. [Google] 有1G内存和4 billion个整数,输出一个不在这些整数内的数, 如果只有10MB内存呢?

1. 1G内存有1024*1024*1024*8个位,扫描一遍记位即可

2. 如果内存不够,可以依次处理10*1024*1024*8个数,需要扫描4*1024/10/8大概50趟

 

41. [Google] Merge N个sorted array

   

42. [Google] 给一个大小为N的数组,输出所有大小为K的子集(K<=N)

    TODO

 

43. [Microsoft] 已知 bst 和两个数, 求在此范围内的节点数。递归和非递归

中序遍历,加一个collection作为参数即可

 

44. [Microsoft] 已知 bst 和一个数, 找到next larger number, O(logn)时间

    TO CODE

 

45. N*N的正方形内有黑白两色,求四边都是黑色的最大的子正方形

    TO LEARN

 

46. 平面上有一组点集,求穿过点最多的直线

计算两两点够成的直线方程x+By+C=0, 找出出现次数最多的方程即可

 

47. 实现itoa

 

48. 给一个2D 的 matrix,按 spiral order打印

   

 

49. [Google] 一个字符串,复制所有的’x’, 再删除所有的’z’, 其它不变

略。。。

 

50. [Google] 实现memcpy(void *src, int size, void *dest);
判断参数合法性,判断src,dest是否相等, 是否 overlapping 时会出错,

    注意memcpy和memmove的区别

 

51. [Google] 大小为N的数组,给出一个大小为K的随机子集

作一个shuffle,然后选取前K个(因此shuffle时只要进行到第K个即可)

 

52. [Microsoft]判断这四个点是不是构成了一个矩形

    TODO

 

53. 实现 char* strtok(char* str, const char* delimeter)

略。。。应该需要用到static变量

 

54. 美国的coin设计为1,5,10,25,任意给定一个change,用greedy algorithm可以算出最少所需要的coins,如何判断一组coin是否可以用greedy algorithm?

TO LEARN

找硬币的DP程序:

 

55. 给定5张牌,写一个函数判断是否有两对

略。。。

56. 在BST中删除一个节点

   

 

57. [Microsoft] 给你一个地址/a/b/../c/./d.txt, 让你把它normalize。

    58. [Microsoft] 给出一个BST和一个值,求所有和等于这个值的Path.

    59. [Microsoft] 按层打印树

    略

 

60. [Google] 五个非常大的数组求交集(考虑时间,空间,I/O)

    略

fr:http://www.mianwww.com/html/2011/10/11329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值