To_10_r_100
jason_cuijiahui
这个作者很懒,什么都没留下…
展开
-
To_10_r_100_8_1---判断出三盏灯分别是由哪个开关控制的
题目: 有两间房,一间房里有三盏灯,另一间房有控制这三盏灯的开关(这两间房是分割开的,毫无联系).现在要你分别进这两间房一次,然后判断出这三盏分别是由哪个开关控制,你能想出办法吗?(注意:每间房只能进一次) 思路: 单单利用灯的亮灭并不足以完成任务,需要考虑除了亮灭的另外的不同点,比如发热 答案: 由于工作时间长的灯泡的温度高,工作时间短的温度低,原创 2015-06-20 09:46:45 · 578 阅读 · 0 评论 -
To_10_r_100_8_6---有304瓶啤酒,每3个空瓶子能换一瓶新啤酒,问能喝到多少瓶啤酒?
题目: 有304瓶啤酒,每3个空瓶子能换一瓶新啤酒,问能喝到多少瓶啤酒? 思路: 当第一次喝了三瓶以后,留下了一个空瓶,以后,每新取两瓶就相当于喝了三瓶 示意图: | o o o | o o | ... | o o | o |-> o |-> o |->o 结果: 3+((304-3)/2)*3+1+(304-3)%2=455原创 2015-09-24 10:39:38 · 784 阅读 · 0 评论 -
To_10_r_100_7---关于链表的环以及相交问题的整理
!参考网络资料和自己的理解整理而得 题目: 1. 如何判断是否有环? 答:如果有两个头结点指针,一个走的快,一个走的慢,那么若干步以后,快的指针总会超过慢的指针一圈而相遇。 感性理解:就像是时钟的分针以及秒针一样。 定量分析:当fast与slow相遇时,show肯定没有走完链表,而fast已经在还里走了n(n>= 1)圈。假设slow走了s步,那么fast走了原创 2015-06-13 09:50:43 · 489 阅读 · 0 评论 -
To_10_r_100_6---根据上排给出十个数,在其下排填出对应的十个数
! 根据网络资料以及自己理解方式重新整理 题目: 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】 例子说明: 共n个数值 数值: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 —— a[0], a[1], ...,a[n-1] 分配: 6, 2,原创 2015-06-12 16:23:49 · 496 阅读 · 0 评论 -
To_10_r_100_3---求子数组的最大和
题目: 输入一个整形数组,数组里有整数也有负数。 数组中连续的一个或多个整数组成一个字数组,每个字数组都有一个和。 求所有字数组的和的最大值。要求时间复杂度为O(n)。 例如: 输入数组:1,-2, 3, 10,-4, 7, 2,-5 其最大的子数组为3, 10,-4 ,7 ,2 输出:18 思路: 贪心算法,从左到右进行扫描求和,若得到的和比存储的最大值要大,则需要更新原创 2015-06-09 22:37:48 · 487 阅读 · 0 评论 -
To_10_r_100_5---查找最小的K个元素
题目: 输入n个整数,输出其中最小的K个。 思路: 1. 复杂度O(nlogn) :快排之类,然后输出最小的K个。 2. 复杂度O(kn) :遍历找k次最大值 3. 堆排序O(n+klogn):建堆O(n),取出k个最小值O(klogn)。 C++代码: 3. 堆排序 // Heap class template class heap{原创 2015-06-12 00:37:02 · 479 阅读 · 0 评论 -
To_10_r_100_4---在二元数中找出某一值的所有路径
题目: 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数 22 ,如下图二元树: 10 / \原创 2015-06-10 09:03:31 · 427 阅读 · 0 评论 -
To_10_r_100_0---把二元查找树转变成排序的双向链表
题目: 把二元查找树转变成排序的双向链表 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { int m_nVa原创 2015-06-06 21:47:49 · 558 阅读 · 2 评论 -
To_10_r_100_2---设计包含min函数的栈
题目: 设计包含min函数的栈 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 方法一: 思路:栈中的每个元素维护一个min元素 C++代码实现: struct MinStackElement{ int value; int min; }; class MinStack{ pub原创 2015-06-08 17:25:06 · 427 阅读 · 0 评论 -
To_10_r_100_8_5---不用乘法或加法增加8倍。现在用同样的方法增加7倍
题目: 不用乘法或加法增加8倍。现在用同样的方法增加7倍 思路: 15(10)=000001111(2)>>2 000000011(2)=3 —— 相当于15/(2^2)=3 15(10)=000001111(2) 000111100(2)=60 —— 相当于15*(2^2)=60 增加8倍:n 增加7倍:n C++代码: 略 原创 2015-06-23 21:51:02 · 884 阅读 · 0 评论 -
To_10_r_100_8_4---用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表
题目: 用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。(个人理解:就是要在头结点和尾结点间插入元素) 思路: 感觉太简单,感觉理解错了吧......不就p->next!=head的话,就可以在p后面插入新元素么.......我想静静...... C++代码: 略 原创 2015-06-20 11:54:15 · 1129 阅读 · 0 评论 -
To_10_r_100_8_2---如果你只能将金条切割两次,你怎样分给这些工人?
题目: 你让一些人为你工作了七天,你要用一根金条作为报酬。金条被分成七小块,每天给出一块。如果你只能将金条切割两次,你怎样分给这些工人? 思路: 类似于找零问题 答案: 把金条切割两次,按照1:2:4比例分为3份,分别标号为a1,a2,a4。 流程: 第一天:把a1给予工人 第二天:把a2给予工人,收回a1原创 2015-06-20 09:58:11 · 957 阅读 · 0 评论 -
To_10_r_100_8_3---颠倒一个链接表的顺序(递归以及非递归方式)
题目: 用一种算法来颠倒一个链接表的顺序。现在用递归以及非递归的方法实现。 思路: 就是把链接表分为一对一对(pair1, pair2)进行处理。如a1->a2->a3->NULL 第一对:(NULL,a1) 第二对:(a1,a2) 第三对:(a2,a3) 第四对:(a3,NULL)——完毕 C++代码(含递归以及非递原创 2015-06-20 11:29:06 · 821 阅读 · 0 评论 -
To_10_r_100_1---N个孩子站成一排,给每个人设定一个权重(已知)。按照如下的规则分配糖果
题目:N个孩子站成一排,给每个人设定一个权重(已知)。按照如下的规则分配糖果: (1)每个孩子至少分得一颗糖果 (2)权重较高的孩子,会比他的邻居获得更多的糖果。问:总共最少需要多少颗糖果?请分析算法思路,以及算法的时间,空间复杂度是多少。思路:先把每个孩子的糖初始化为1,经过两轮扫描:第一轮:保证后面比前面权值高的孩子,必定多得1个糖果第二轮:保证前面比后面权值高的孩子,必定多得1个糖果把分原创 2015-06-07 23:53:51 · 2361 阅读 · 0 评论