数据结构&算法
文章平均质量分 60
Manguoge
因为苹果,所以iOS。
这是一个有空写写的软件开发博客。
展开
-
算法基础:快速排序算法原理与实现
有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。步骤如下:在序列中选择一个关键元素做为轴;对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;递归地对两个子序列进行重新排序:含有较小元素的子序列和含有较大元素的子序列。原创 2017-02-23 00:39:16 · 289 阅读 · 0 评论 -
算法基础:堆排序原理及其实现
堆排序是利用堆的性质进行的一种选择排序。转载 2017-03-06 14:09:03 · 202 阅读 · 0 评论 -
算法基础:数据结构与算法入门概览
《算法导论》里将算法描述为定义良好的计算过程,取一个或者一组值作为输入,并产生一个或者一组值作为输出。原创 2017-02-04 19:56:56 · 546 阅读 · 1 评论 -
算法基础:基本排序算法原理、实现与总结
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。原创 2017-02-10 20:36:05 · 932 阅读 · 0 评论 -
剑指:二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原创 2017-02-15 17:19:18 · 338 阅读 · 0 评论 -
剑指:用“ ”替换字符串中的空格
实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。原创 2017-02-15 21:25:07 · 139 阅读 · 0 评论 -
剑指:反转链表
输入一个链表,反转链表后,输出链表的所有元素。思路1:三个指针在链表上同时滑动,比较容易想到但是编码略复杂;思路2:依次取出链表的插入到新链表的头部原创 2017-02-15 22:33:23 · 272 阅读 · 0 评论 -
剑指:从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。思路1:采用反向迭代器;思路2:采用递归。原创 2017-02-16 10:56:04 · 139 阅读 · 0 评论 -
剑指:根据输入的前序和中续遍历序列重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。在二叉树的前序遍历中,第一个数字总是树的根节点,但在中序遍历中根节点在序列的中间,左子树的节点序列位于跟节点的左边,右子树的节点序列位于根节点的右边。原创 2017-02-17 17:38:14 · 368 阅读 · 0 评论 -
剑指:用两个栈实现队列的先进先出
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:运用栈的先进后出原理,一个栈用来实现队列的push操作,一个用来实现栈的pop操作,具体定义如下;队列push操作,放入栈A;队列pop操作,当栈B空时,将栈A的元素依次弹出压入栈B;当栈B非空时,弹出栈B最上面的元素。原创 2017-02-18 14:16:40 · 555 阅读 · 0 评论 -
剑指:用两个队列实现栈的先进后出
用两个队列来实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。思路:利用队列的先进先出,犹如一条龙循环穿梭在队列A、B一样,每次新元素进,则进入队列的尾部,具体定义如下:栈的push操作,首先找到有元素的队列(两队都为空则元素入队列B),将元素入此队栈的pop操作,将有元素的队列的元素以此出队并以此入另一队,直到最后一个元素,直接将至元素出队实现pop操作上述两个操作的病原则就是保证将元素全部放在一个队,当需要栈的pop操作时,犹如一条龙循环从当前队列穿梭到另一队列,并去除最尾部的原创 2017-02-18 14:40:51 · 853 阅读 · 0 评论 -
剑指:旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:首先理解这个旋转数组的元素大小关系非常重要,很明显我们能够观察到其关系从数组头到尾如下原创 2017-02-18 15:27:59 · 230 阅读 · 0 评论 -
剑指:斐波纳契数列动态规划求解
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*),现在要求输入一个整数n,请你输出斐波那契数列的第n项。原创 2017-02-19 20:49:23 · 368 阅读 · 0 评论 -
剑指:跳台阶与变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:采用分治法,本次跳的跳法等于他的前一步和前两部的跳法之和,运用递归求解,即和斐波那契数列一样原创 2017-02-19 21:54:54 · 282 阅读 · 0 评论 -
剑指:二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。原创 2017-02-20 23:11:06 · 313 阅读 · 0 评论 -
剑指:矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:第一块有两种方式:横着放和竖着放横这放对应为发f(n-2);竖着放下一步的放方法为f(n-1);所以总的放的方法为f(n)=f(n-1)+f(n-2);实现: int rec原创 2017-02-20 23:14:31 · 224 阅读 · 0 评论 -
剑指:数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路1:累乘,时间复杂度为O(n)原创 2017-02-21 11:34:16 · 222 阅读 · 0 评论 -
剑指:链表中的倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点。思路:两个指针相隔k-1个结点,同时前进,当第一个的指针到达尾结点时,第二个指针指向的节点即是倒数第K个结点原创 2017-02-21 17:18:02 · 185 阅读 · 0 评论 -
算法基础:归并排序算法原理与实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。原创 2017-02-24 17:07:21 · 286 阅读 · 0 评论