一些有趣的题目(整理版)


据说是Google的面试题目
据说是Google的面试题目
对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。
答案:
需要维护一个最小值及其在原栈中的位置辅助栈
Min_n,Pos_n 为原栈中[0,Pos_(n+1) -1 ]的最小值
... ...
Min_2,Pos_2 为原栈中[0,Pos_3 - 1]的最小值
Min_1,Pos_1 为原栈中[0,Pos_2 - 1]的最小值
Min_0,Pos_0(==0) 为原栈中[0,Pos_1 - 1]的最小值,即原栈的栈底元素
当原栈push的时候,如果数据比辅助栈头数据小,则将其数据和在原栈的位置压入辅助栈,始终保证辅助栈头的数据最小
当原栈pop的时候,如果其pop位置正好为辅助栈头的位置Pos_n,则说明正在弹出当前最小值,应同时为辅助栈pop,然后辅助栈头的数据Min_(n-1)正好是原栈[0,Pos_n -1]的最小值

 

 


 

荒岛野人


【问题描述】
克里特岛以野人群居而著称。岛上有排列成环行的M个山洞。这些山洞顺时针编号为1,2,…,M。岛上住着N个野人,一开始依次住在山洞C1,C2,…, CN中,以后每年,第i个野人会沿顺时针向前走Pi个洞住下来。每个野人i有一个寿命值Li,即生存的年数。下面四幅图描述了一个有6个山洞,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。
奇怪的是,虽然野人有很多,但没有任何两个野人在有生之年处在同一个山洞中,使得小岛一直保持和平与宁静,这让科学家们很是惊奇。他们想知道,至少有多少个山洞,才能维持岛上的和平呢?

【输入文件】
输入文件savage.in的第1行为一个整数N(1<=N<=15),即野人的数目。第2行到第N+1每行为三个整数Ci, Pi, Li (1<=Ci,Pi<=100, 0<=Li<=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。

【输出文件】
输出文件savage.out仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于106。


【样例输入】
3
1 3 4
2 7 3
3 2 1

【样例输出】
6

【样例说明】
该样例对应于题目描述中的例子。

1.给定一个数组,储存了1000万个整数,找出一个不在这个数组里的整数。
2.给定一个链表。使用两个指针判断链表有无循环
1。先冒泡排序会不会好一点?排序完了取比最小的-1或者最大的+1就可以
有没有书上讲冒泡的代价?或者网上找一个优化的排序算法,总之我觉得
先排序会快一点。
算一下开销,按冒泡:
第一个比较1000-1万次,第二个1000万-2次,第1000万个1次,
是(1+2+3+....+1000万)=1000万*500万;优化的排序算法可以更少
如果直接比较,轮数是概论性质的,1到1000万次之间均匀分布,数学期望500万轮,每轮1000万次,所以数学期望是500万*1000万;
毕竟是数学期望,方差会比较大吧,而且优化的排序算法会更快吧......
2。我没学过数据结构,是不是链表就是结构体里面有一个是指向下一个结构体的指针?如果是,最直接的方法肯定是,p1指向头
然后p2挨个next,检查if p1==p2,不是p2=p2->next;
如果到头也没有,p1再next;次数是n到n+(n-1)+(n-2)+...+1=n*n-(n+1)*n/2=
n*(n-1)/2之间,数学期望是....(不会算了)
提高效率可以再建个数组玩冒泡排序,但是题目规定只能用俩指针....

有5个广口瓶,里面盛着同一种药丸,其中一个里面的药被污染了,已知被污染的药重量为9g,没被污染的药重量为10g,给你一个台秤,注意,不是天平,请你只称一次,就把污染的那瓶药找出来。

题一:
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?
题二:
假设A、B、C、D、E各个城市之间旅费如下所示。某人想从城市A出发游览各城市一遍,而所用费用最少。试编程序输出结果。(要求用穷举法把所有可能的情况全部列出,再找出其中最短的那条路径)
A到B旅费为7,A到C旅费为3,A到D旅费为10,A到E旅费为15
B到C旅费为5,B到D旅费为13,B到E旅费为12
C到D旅费为6,C到E旅费为5
D到E旅费为11

 


 

有两个几百位的整数相加,由于受到计算机的限制不能直接做加法,请用所学的数据结构知识解决这道题。请问用什么数据结构知识?写出它的算法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值