数据结构算法基础
文章平均质量分 63
Gawain的IT起步
这个作者很懒,什么都没留下…
展开
-
对于栈的排序
ctci中stack一章的一道题 对一个stack排序,只允许使用一个额外栈,不能使用其他数据结构。 算法如下: 类似于插入排序,首先先从初试栈中pop出一个元素,然后将其插入到新栈的适当位置。插入时,用peek()判断新栈当前的top和pop出来的这个元素的关系,如果时out of order,将当前这个top元素重新push回初始栈中。然后继续向下peek,直到找原创 2014-02-27 06:44:17 · 651 阅读 · 0 评论 -
FasterRunner/SlowerRunner算法检测linkedlist中的loop
本技术博的第一文,为笔者在学习data structure and algorithm过程中的一些心得与总结,纯属复习。 Ctci中linkedlist一节最后一道题: Detect the loop of a given linkde list and return to the first node of the list. Faster/Slower算法概述:原创 2014-02-24 04:24:04 · 801 阅读 · 0 评论 -
判断BinaryTree是否为BinarySearchTree的O(N)算法
判断一个BinaryTree是否为BinarySearchTree 最直接的方法就是对于每个节点,遍历其所有子结点,判断是否左子树节点均小于根,并且右子树节点大于根。其复杂度为O(N^2),并且该方法需要用到非递归遍历来比较每一个节点和根,代码相对复杂。 根据BinarySearchTree的定义,根节点永远大于左子树,永远小于右子树。因此对于每个根的左子树节点,都限定了其最大值为根节点原创 2014-03-05 15:19:30 · 727 阅读 · 0 评论 -
MergeSort 求逆序数
逆序数,定义为一对元素,其大小关系不符合顺序。比如a[0]=1;a[1]=0,这两个元素就为一对逆序。 求逆序数最直接的方法就是一组一组的判断,给一个长度为n的数组,使用两个for循环判断每一组数是不是逆序。因此,该方法复杂度为O(N^2). 若要使用更快的算法,可基于merge sort来求。 mergesort通过把数组一层一层的分割,在合并的方法对数组排序。在每原创 2014-02-24 09:52:45 · 963 阅读 · 0 评论 -
BinaryTree的高度求解及平衡树判断
BinaryTree 的高度指其根到叶子结点路径中最长的距离 比如如下binarytree: 2 3 1 4 2 3 5 6 7原创 2014-02-27 08:56:29 · 899 阅读 · 0 评论 -
<leetcode> Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray [4,−1,2,1] ha原创 2014-09-01 03:45:08 · 362 阅读 · 0 评论