随笔分类 -  数据结构与算法

1 2 下一页

斐波那契数列Java实现[剑指offer]
摘要:"题目" 描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 题解 1.递归实现 采用递归的方式进行实现时,从第n个节点向下递归时,存在重复节点,当n越大时,递归越慢,往往会超出题目要求的时间限制 2.非递归实现 描述 为避免重复 阅读全文

posted @ 2019-11-12 19:41 ERFishing 阅读(212) 评论(0) 推荐(0)

用两个栈实现队列Java实现[剑指offer]
摘要:"题目" 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 题解 描述 栈的特性是先进后出,队列的特点是先进先出,当数字依次入栈1后,依次出栈1并且压入栈2后,然后再出栈的顺序与进入栈1的顺序是一致的。 因此,进入队列通过压入栈1实现,弹出队列通过弹出栈2的栈顶元 阅读全文

posted @ 2019-11-12 19:00 ERFishing 阅读(175) 评论(0) 推荐(0)

二叉树的下一个节点Java实现[剑指offer]
摘要:"题目" 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题解 描述 1.判断节点是否有右子树 有就返回当前节点右子树的最左节点,注意不是最右子树的左节点 2.若没有 2.1判断当前节点若是左子节点 当前节点的下 阅读全文

posted @ 2019-11-12 09:00 ERFishing 阅读(432) 评论(0) 推荐(1)

重建二叉树Java实现[剑指offer]
摘要:"题目" 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 题解 描述 首先通过前序遍历序列找到根节点; 在中序 阅读全文

posted @ 2019-11-11 20:43 ERFishing 阅读(452) 评论(0) 推荐(0)

从头到尾打印链表Java实现[剑指offer]
摘要:题目 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 第一想法可能是将链表反转,但是根据题意,应当是不能改变链表的结构的。 1通过栈的思想实现 1.1描述 链表的节点越靠后,就越先打印,符合先进后出的思想,利用ArrayList类中add方法可以指定index,将当前节点放在链表的最 阅读全文

posted @ 2019-11-10 19:46 ERFishing 阅读(602) 评论(0) 推荐(0)

替换空格Java实现[剑指offer]
摘要:题目 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 在使用C++编写时需要考虑内存的问题,但是在java中可以调用函数进行; 1使用replace()函数 1.1描述 将StringBu 阅读全文

posted @ 2019-11-10 19:16 ERFishing 阅读(231) 评论(0) 推荐(0)

二维数组中的查找Java实现[剑指offer]
摘要:题目 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 1以矩形来查找 1.1描述 将二维数组画成矩形,然后从数组中选取一个数字,分3中情况来分析查找的过程 阅读全文

posted @ 2019-11-10 18:23 ERFishing 阅读(568) 评论(0) 推荐(0)

数组中重复的数组Java实现[剑指offer]
摘要:题目 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 题解 1通过排序实现 1. 阅读全文

posted @ 2019-11-08 20:41 ERFishing 阅读(690) 评论(0) 推荐(0)

D16-常用十种算法[Java数据结构和算法]
摘要:1.二分查找(非递归)代码实现 1 //实现查找的非递归查找 2 /** 3 * 4 * @param arr 待查找的数组,arr是升序排序 5 * @param target 需要查找的数 6 * @return 返回对应的下标,-1表示没找到 7 */ 8 public static int 阅读全文

posted @ 2019-08-28 16:11 ERFishing 阅读(363) 评论(0) 推荐(0)

D15-图[Java数据结构和算法]
摘要:1.图的基本介绍 1.1 图是一种数据结构,其中节点可以具有0个或多个相邻元素,两个节点之间的连接称为边,节点也可称为顶点; 1.2 图的表示方式:二维数组表示(邻接矩阵),链表表示(邻接表) (1)邻接矩阵:邻接矩阵表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是row和col表示的 阅读全文

posted @ 2019-08-20 17:12 ERFishing 阅读(195) 评论(0) 推荐(0)

D14-多路查找树[Java数据结构和算法]
摘要:1. 二叉树和B树 1.1二叉树的问题分析 (1)二叉树需要加载到内存,若二叉树的节点少不存在什么问题; (2)若节点较多,在构建二叉树时,需要多次进行I/O操作,节点海量,构建二叉树时,速度有影响; (3)节点海量,会造成二叉树的高度很大,会降低操作速度; 1.2 多叉树(multiway tre 阅读全文

posted @ 2019-08-19 17:11 ERFishing 阅读(296) 评论(0) 推荐(0)

D13-平衡二叉树[Java数据结构和算法]
摘要:1.平衡二叉树基本介绍 1.1平衡二叉树又叫平衡二叉搜索树(Selg-balancing binary search tree),又叫AVL树,可以保证查询效率较高; 1.2 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是平衡二叉树。 1.3 平衡二叉树的常用实 阅读全文

posted @ 2019-08-19 15:41 ERFishing 阅读(285) 评论(0) 推荐(0)

D12-二叉排序树[Java数据结构和算法]
摘要:1.二叉排序树(BST;Binary Sort(Search)Tree) 1.1对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大;当有两个相同的值时,可以放在左子节点或右子节点; 2.二叉排序树删除节点 2.1删除叶子节点 (1)找到要删除的节点ta 阅读全文

posted @ 2019-08-18 17:15 ERFishing 阅读(197) 评论(0) 推荐(0)

D11-堆排序和赫夫曼编码[Java数据结构和算法]
摘要:1.堆排序 1.1 基本介绍 (1)堆排序是利用堆这种数据结构设计的排序算法,是一种选择排序,他的最好最坏平均时间复杂度为O(nlogn),是不稳定排序; (2)堆是具有以下性质的完全二叉树,每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;每个节点的值都小于或等于其左右孩子节点的值,称为小顶 阅读全文

posted @ 2019-08-18 15:14 ERFishing 阅读(277) 评论(0) 推荐(0)

D10-树[Java数据结构和算法]
摘要:1.数组、链表和树存储方式分析 1.1数组的存储方式 (1)优点:通过下表当时访问元素,速度快。对于有序数组,还可以使用二分查找提高检索速度 (2)缺点:如果检索具体某个值,或者插入值(按照一定顺序)会整体移动,效率较低 1.2 链式存储方式的分析 (1)优点:在一定程度上对数组存储方式有优化(例如 阅读全文

posted @ 2019-08-13 15:41 ERFishing 阅读(185) 评论(0) 推荐(0)

D9-哈希表[Java数据结构和算法]
摘要:1. 哈希表的介绍和内存布局 1.1哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表 1.2 哈希表图例 2.哈希表实现思路图解 阅读全文

posted @ 2019-08-11 17:29 ERFishing 阅读(257) 评论(0) 推荐(0)

D8-查找算法[Java数据结构和算法]
摘要:1.查找算法介绍 1.1 在java中常用的查找:顺序(线性)查找,二分查找/折半查找,插值查找,斐波那契查找 2.线性查找源代码 1 package cn.atguigu.Search; 2 3 public class SeqSearch { 4 5 public static void mai 阅读全文

posted @ 2019-08-11 15:23 ERFishing 阅读(530) 评论(0) 推荐(0)

D7-排序算法(三)[Java数据结构和算法]
摘要:1.快速排序(QuickSort) 1.1 快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 package cn.at 阅读全文

posted @ 2019-08-10 15:31 ERFishing 阅读(239) 评论(0) 推荐(0)

D6-排序算法(二)[Java数据结构和算法]
摘要:1.内部排序 1.1 插入排序(Insert Sorting) (1)思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为 阅读全文

posted @ 2019-08-09 15:04 ERFishing 阅读(284) 评论(0) 推荐(0)

D5-排序算法(一)[Java数据结构和算法]
摘要:1.排序也称排序算法(sort Algorithm),排序是将一组数据,依指定的顺序进行排序的过程 1.1 排序的分类 (1)内部排序:指将需要处理的所有数据都加在到内部存储器中进行排序。 (2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序 1.2 常见的排序 (1)内部排序 阅读全文

posted @ 2019-08-04 20:27 ERFishing 阅读(391) 评论(0) 推荐(0)

1 2 下一页