Algorithms
文章平均质量分 55
有梦想的小树
盛年不重来,一日难再晨,及时当勉励,岁月不待人
展开
-
二叉树中找到一个节点的后继节点
1.后继节点:二叉树的中序遍历下,某节点的后一个节点就是后继节点。2.两种情况:节点有右子树:右子树中的最左节点就是该节点的后继节点。可以通过“左中右”顺序理解一下。 节点无右子树:一直向上查找,直到该节点是父节点的左孩子,即为后继节点。3.节点的数据结构,比一般情况下多了一个parent节点。该结构比普通二叉树节点结构多了一个指向父节点的parent指针。 假设有一 棵Node类型...原创 2019-10-13 15:53:24 · 973 阅读 · 0 评论 -
二叉树的递归遍历、非递归遍历、层次遍历
1.递归遍历2.非递归遍历3.层次遍历1.递归遍历在使用递归遍历的时候,每个节点会经过三次.public class PreInPosTraversal { public static class Node { public int value; public Node left; public Node right; public Node(int da...原创 2019-10-13 15:28:28 · 629 阅读 · 0 评论 -
Java实现堆结构
public class HeapSort { // 堆排序O(nlogn) public static void heapSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr.length; i++) { heapIn...原创 2019-10-12 23:01:36 · 170 阅读 · 0 评论 -
红黑树
一、定义红黑树的五个性质:一般的,红黑树(一棵自平衡的排序二叉树),满足以下性质,即只有满足以下性质的树,我们才称之为红黑树:1)每个结点要么是红的,要么是黑的。2)根结点是黑的。3)每个叶结点,即空结点(NIL)是黑的。4)如果一个结点是红的,那么它的俩个儿子都是黑的。5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。抓住了红黑树的那5个性质,...转载 2019-04-25 09:09:39 · 141 阅读 · 0 评论 -
无序数组排序后,求相邻两数之间的最大差值,代码过程详解
题目:给定一个数组,求排序之后,相邻两数之间的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。示例:例如:3 1 6 2 7 排序之后 : 1 2 3 6 7 则相邻最大差值为3(6-3=3)解法:1.循环数组,找到最小值和最大值。2.若有N个数,就创建N+1个桶来装数,分别为 0号桶,1号桶,2号桶......N号桶。...原创 2019-03-03 22:18:31 · 2613 阅读 · 0 评论 -
优化经典快排
问题1:给定一个数组arr, 和一个数num, 请把小于等于num的数放在数组的左边, 大于num的数放在数组的右边。要求额外空间复杂度O(1), 时间复杂度O(N)。public class a { public static void partition (int[] arr, int num) { int left = -1; for (int ...原创 2019-03-03 14:43:28 · 291 阅读 · 0 评论 -
Manacher “马拉车”算法
1.回文 :正着念和反着念都是一样的,就是可以对称。2.暴力解不是很好,因为有奇数和偶数长度的串。奇数长度可以方便地扩展回文,但是偶数不便扩展。3.使用技巧:在字符串的每个字符的两边都穿插特殊标记符号(任何符号都可以:因为虚轴不会和实轴比对)。这就使所有的字符串都变成了奇数长度。4.例如:11311 ---> #1#1#3#1#1# -->1 3 5 3 1 11 1...原创 2019-03-01 21:04:27 · 271 阅读 · 0 评论 -
归并算法及其归并算法的应用
1.归并排序public class MergeSort { public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { return; } mergeSort(arr, 0, arr.length - 1); } public static void...原创 2019-03-04 21:32:39 · 642 阅读 · 0 评论 -
01背包理解及空间优化(动态规划)
目录:问题描述 问题分析 构造最优解 空间优化1. 问题描述:给定N个物品和容量为C的背包,每个物品的重量是Wi,价值为Vi,每个物品只有选择装入背包或者选择不装如背包。求如何选择能使得背包装入的总价值最大。2. 问题分析:使用一个二维数组来存储每种状态。声明二维数组大小为m[n][c],其中m[i][j]表示在前i个物品中进行适当的选择,使得在不超过背包容量j时能获得最大价值。分...原创 2018-12-08 23:05:13 · 1624 阅读 · 0 评论 -
回溯算法(排列树+子集树)
回溯法: 回溯法(backtracking)有“通用的解题法”之称。回溯法对任一解的生成,一般都采用逐步扩大解的方式。每前进一步,都试图在当前部分解的基础上扩大该部分解。它在问题的状态空间树中,从开始结点(根结点)出发,以深度优先搜索整个状态空间。这个开始结点成为活结点,同时也成为当前的扩展结点。在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为新的活结点,并成为当前扩展结点。如...原创 2018-12-05 22:51:01 · 5157 阅读 · 1 评论 -
汉诺塔问题
汉诺塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。 思路:如果只有 1 个盘子,则不需要利用B塔,直...原创 2018-12-05 21:24:00 · 410 阅读 · 0 评论