面试题集锦---BY算法导论小组
2015-08-10 16:05
681 查看
3.21题
1.给定能随机生成整数 1 到 5 的函数,写出能随机生成整数 1 到 7 的函数。
提示:两个random就可以有25种可能,每种可能都是等概率的
2.判断一个自然数是否是某个数的平方,不能使用开方运算。
提示:(1)使用二分查找法,对1到N之间的数字进行判断。复杂度为O(logn)
(2)由于(n+1)^2 =n^2 + 2n + 1= ...= 1 + (2*1 + 1)
+ (2*2 + 1) + ... + (2*n + 1)
注意到这些项构成了等差数列(每项之间相差2)。
所以我们可以比较 N-1, N - 1 - 3, N - 1 - 3 - 5 ... 和0的关系。
如果大于0,则继续减;如果等于0,则成功退出;如果小于 0,则失败退出。
复杂度为O(n^0.5)。
3.如何在半径为1的圆中随机选取一点。
提示:用极坐标来表示
4.皇冠用户仓库开销:有一个淘宝商户,在某城市有n个仓库,每个仓库的储货量不同,现在要通过货物运输,
将每次仓库的储货量变成一致的,n个仓库之间的运输线路围城一个圈,即1->2->3->4->...->n->1->...,货物只能通过连接的仓库运输,设计最小的运送成本(运货量*路程)达到淘宝商户的要求,并写出代码。
提示:遍历一遍,纪录欠的货量和多的货量,一旦有多的就向顺时针方向移动;复杂度:O(n)
4.5题
1.在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下动作:选取两个黑板上的数字a和b,
擦去,在黑板上写|b - a|。请问最后一次动作之后剩下数字可能是什么?为什么?提示:找规律,要么留下全为奇数,要么为偶数
2.如何判断链表无环?
提示:(1)加一个数据结构,来记录链表的位置或者Key信息,遍历看看是不是会遇到相同的节点(2)用两个指针一起走,一个步长是1,一个步长是2,然后遍历看看是不是会重合
3.有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,
要在1周内找出那桶毒酒,问最少需要多少老鼠。提示:可以将酒混合后喝
答案:10只。将酒编号为1~1000 将老鼠分别编号为1 2 4 8 16 32 64 128 256 512 喂酒时 让酒的编号等于老鼠编号的加和如:17号酒喂给1号和16号老鼠 76号酒喂给4号、8号和64号老鼠 七天后将死掉的老鼠编号加起来 得到的编号就是有毒的那桶酒 因为2的10次方等于1024 所以10只老鼠最多可以测1024桶酒
证明如下:使用二进制表示:01, 10, 100, 1000, … , 1,000,000,000。对于任何一个小于1024的数,均可以采用前面的唯一一组二进制数来表示。故成立。
4.输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,
每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
提示:遍历一遍,遇到sum<0,就重新从正数开始计数
5.输入n个整数,输出其中最小的k个。
提示:(1)先将所有数字建小堆,然后弹出K个值就可以了;复杂度:n+k*lgn(2)现将任意k个数字建大堆,然后将剩下的数分别和堆顶数字比较,如果比堆顶数字小,就将堆顶的数字换掉,
比较剩下的n-k个数字后,堆里剩下的数字就是最小的k个;复杂度:k+(n-k)*lgk
6.设计包含min函数的栈
提示:在栈的旁边在加一个数组,记录最小的数的位置相关文章推荐
- 黑马程序员--IO流之字符流
- PHP的文件操作与算法实现的面试题示例
- 黑马程序员——面向对象概述+类与对象的关系-第8天
- Mac Pro 提高效率 快捷键 程序员
- 关于游戏程序猿的职业生涯规划
- 题解分析及总结:经典逻辑面试题“假设有一个池塘,里面有无穷多的水,现有2个空水壶,如何使用少于15L的水,用2个水壶从池塘里取得3升水”
- 99%的海量数据处理面试题
- Android程序员必读电子书推荐
- 程序员学炒股(7) 股指期货收盘价对第二天开盘价有影响吗?
- 为什么想得慢的人能赢,程序员又如何
- 程序员常去的14个顶级开发社区
- 为什么程序员的业余项目大多都死了?
- 黑马程序员——代理
- 漫谈程序员(五)20年资深程序员编程经验分享
- 漫谈程序员(五)20年资深程序员编程经验分享
- 黑马程序员——类加载器
- 漫谈程序员(四)三个因素决定你的薪水高低
- 漫谈程序员(四)三个因素决定你的薪水高低
- 漫谈程序员(二)程序员保值的4个秘密
- 漫谈程序员(二)程序员保值的4个秘密