数据结构与算法
文章平均质量分 51
John-Han
好记性,不如烂笔头!
展开
-
编程训练:潜伏(9528)
题目:记录长度为N(1原创 2014-11-24 20:57:48 · 922 阅读 · 0 评论 -
线性表--数组和链表的区别
数组是将元素在内存中连续存放,从栈中分配空间,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。增加和删除操作的效率并不高,如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。链表恰好相原创 2015-07-07 07:41:18 · 3320 阅读 · 0 评论 -
1000瓶药中找出一瓶毒药,10只老鼠做试验
题目如下:现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药?题解:这道题明显就是只能一开始就把所有药都喂给10只老鼠,1小时后就直接一次性出结果。现在以2只老鼠做例子,每只老鼠喝一瓶药,2只老鼠能验出2瓶,最多只能从3瓶中找出一瓶毒药;这显然不够的,但是如果是用第一只老鼠喝第一瓶药,第二只老鼠喝第二瓶药,第1和第2只老鼠原创 2015-06-29 14:30:51 · 25817 阅读 · 2 评论 -
合并两个有序数组
题目:有两个排序的数组A和B,数组A剩余的空间刚好够容纳B,请实现一个函数,把B中的所有数字插入到A中并且所有的数都是排序的。很多人一开始的想法就是简单的插入,足够暴力,在A中直接从头到尾遍历,找到合适的位置就移动后面所有的元素,让出一个位填补新插入的数,这种做法是效率最低的。反其道而行之,更好的办法是从尾开始比较A和B中的数字,把较大的数字复制到A的末尾。这种解决方法同样可以原创 2015-06-26 15:17:53 · 779 阅读 · 0 评论 -
行元素从小到大递增,列元素从小到大递增的数组查找算法
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。考点:这道题主要是要利用好所给的两个条件,行递增和列递增,将肯定不合适的数据排除在外,将要遍历的数据尽可能的减少。数组例子如下:1289249124原创 2015-06-26 14:44:30 · 1156 阅读 · 0 评论 -
快速排序Qsort
<?phpfunction Partition(&$arr,$low,$high){ $_t=$arr[$low]; while($low<$high) { //注意第二个限制条件,不然如果一直都是大于会超过数组下标 while($arr[$high]>$_t&&$high>$low) --$high; $arr[$low]=$arr[$high]; while($ar原创 2015-06-27 15:01:55 · 768 阅读 · 0 评论 -
队列与栈:两个栈实现队列,两个队列实现栈
1、题目:用两个栈实现一个队列。先用一个栈录入数据,再输出这个栈到另外一个栈,就可以形成队列的先进先出顺序了。因为PHP的数组可以模拟栈的实现,所以代码如下:<?phpfunction StackToQueue($data){ $arr=array(); while($_t=array_pop($data)) { array_push($arr, $_t); } retur原创 2015-06-27 14:40:03 · 660 阅读 · 0 评论 -
递归与递推实现斐波那契数列算法
<?php/*f(n)=f(n-1)+f(n-2)f(0)=0f(1)=1*/function Fibonacci($n){ if($n<=0) { return 0; } if($n==1) { return 1; } return f(n-1)+f(n-2);}/*递推实现*/function Fibonacci1($n){ if($n<=0原创 2015-06-27 15:18:04 · 1519 阅读 · 0 评论 -
关于赛马的问题,25匹赛出前3名或者前5名
一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的5匹马?分组一:一二三四五1611162127121722381318234原创 2015-05-11 14:12:02 · 3566 阅读 · 3 评论 -
操作系统中栈和堆的区别
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(转载 2015-07-07 07:52:38 · 919 阅读 · 0 评论