
数据结构
RenSV
为BUG生
展开
-
判断链表成环,且找出环的起点
判断链表成环,且找出环的起点。 判断链表成环 找出环的起点 Java代码实现 1. 判断链表是否成环 Floyd环判断法:从同一个起点同时开始以不同速度前进的2个指针最终相遇,那么可以判定存在一个环。 设想:乌龟和兔子在同一个环上赛跑,跑的快的兔子速度为2,跑的慢的乌龟速度为1,则兔子终会赶上乌龟。 理解:如果以乌龟为参考对象,则兔子前进的速度为1,这就意味着,兔子必...原创 2017-11-28 21:14:00 · 5413 阅读 · 2 评论 -
算法中时间复杂度分析
算法的时间复杂度表示算法运行所需要的时间 大O表示法 递归算法中时间复杂度分析 大O表示法 大O表示法 是一种体现算法时间复杂度的记法,如果用n表示数据规模,那么O(f(n)表示算法说需要执行的指令数(消耗的时间)和 f(n) 成正比。大O表示法指出了算法执行的最低上限。(大O表示法的前边省略了一个常数)。 例子:有一个字符数组,将数组中的每一个字符串按照字母排序,再将整个字...原创 2018-03-05 10:47:54 · 655 阅读 · 0 评论 -
基于链表的插入排序
插入排序的基本介绍 插入排序的时间复杂度为O(n*n),但是在 给定数据近乎有序的情况下,它的时间复杂度可以接近O(n).它的基本思想是对于当前的节点。不断与该节点前面节点进行比较,直到它前面的数据小于它。如下图所示: 对元素2进行排序时,只要往前一直找,就可以将它插入合适的位置。 插入排序基于数组很容易实现,原因在于我们可以很方便的找到每一个位置上的数据。但是链表不能这么做,原因在于很...原创 2018-03-25 21:15:43 · 269 阅读 · 0 评论 -
基于链表的归并排序
归并排序基本介绍 归并排序排序是一种常用的时间复杂度为O(n*lg n)的算法,它的基本想法是先对数据不断二分,然后对分开的每段数据进行合并,利用递归的思想,很容易完成排序。归并排序又分为自顶向下和自底向上两种实现方式,自顶向下实现起来比较简单,就是递归,对数据进行二分和合并。对与自底向上而言,,则需要考虑到每次归并元素的个数。 这里要注意的是,对与每次归并来说,必须保证链表的完整性,不能出现...原创 2018-03-25 21:37:25 · 709 阅读 · 0 评论 -
leetcode 第235题 和 第236 题:Lowest Common Ancestor
前言:第235题 和 第236 题都是求解一棵树中两个结点最近公共祖先(LCA)问题,但是不同之处在于235给出的树为一棵二叉搜索树(BST),而236是一颗一般的二叉树,这样的话在235中利用BST的性质可以很方便的解决问题,但是在236中就必须全面考虑。 一般而言,找一棵树的LCA可以分为三种情况:俩个结点分别在LCA的不同子树,两个结点中的一个就是LCA。 第235题 Lowest ...原创 2018-04-01 21:11:09 · 521 阅读 · 0 评论 -
二叉搜索树(BST)的相关问题
前言:在二叉搜索树中,对于每个结点,它的所有左子树结点的元素小于当前节点数据,所有右子树结点大于当前结点。 二叉搜索树的三种常见操作:查找、删除、插入。 查找 在查找操作中,就可以看到二叉搜索树的优势,它的时间复杂度为O(lg n). //查找 public TreeNode find(TreeNode root,int data){ if(root == null) ...原创 2018-04-01 22:14:52 · 265 阅读 · 0 评论