数据结构与算法
fxkcsdn
学习要有一定的广度才能触发深度学习的兴趣,有兴趣再去深度学习,否则达不到真正的深度
展开
-
【算法-动态规划】-最大子段和
动态规划算法与分治法类似,其基本思想也是将待求解问题分解为若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适用与动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归的求解这些子问题,然后将各子问题的解合并得到原问题的解。如果用分治法求解时,有些子...原创 2018-07-30 20:24:30 · 27902 阅读 · 8 评论 -
【算法】面试题——栈的最大值问题
https://blog.csdn.net/taotaotheripper/article/details/8652665原创 2018-08-25 10:57:48 · 1363 阅读 · 0 评论 -
【数据结构】红黑树和AVL区别
总结:查询多的用AVL,删除插入多的用红黑树今天看了STL源码剖析中关于红黑树的原理和实现,看完复杂的节点插入、节点颜色变换后不禁想:这些功能经典的AVL树也能实现,为什么要提出红黑树?查了些资料,并且加上自己理解,感叹红黑树的巧妙。首先红黑树是不符合AVL树的平衡条件的,即每个节点的左子树和右子树的高度最多差1的二叉查找树。但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点...原创 2018-08-15 19:39:13 · 1456 阅读 · 0 评论 -
【数据结构】红-黑树
1.红-黑树的特征 它主要有两个特征:1.节点都有颜色;2.在插入和删除的过程中,要遵循保持这些颜色的不同排列的规则。首先第一个特征很好解决,在节点类中店家一个数据字段,例如boolean型变量,以此来表示节点的颜色信息。第二个特征比较复杂,红-黑树有它的几个规则,如果遵循这些规则,那么树就是平衡的。红-黑树的主要规则如下: 1.每个节点不是红色就是黑色的;...转载 2018-08-15 16:47:13 · 251 阅读 · 0 评论 -
【倒排索引】待定
待定原创 2018-08-12 22:45:17 · 132 阅读 · 0 评论 -
【数据结构】平衡二叉树的插入、删除
目录定义:什么叫平衡二叉树定义及原理不平衡的四种情况旋转操作插入节点删除节点定义:什么叫平衡二叉树是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一...原创 2018-08-14 23:47:21 · 31187 阅读 · 18 评论 -
【算法】动态规划——高级篇
转载地址:https://blog.csdn.net/baidu_28312631/article/details/47418773在我的上一篇文章中已经详细讲解了动态规划的原理和如何使用动态规划解题。本篇文章,我将继续通过例子来让大家更加熟练地使用动态规划算法。 话不多说,来看如下例题,也是在动态规划里面遇到过的最频繁的一个题,本题依然来自于北大POJ: 最长公共子序...转载 2018-08-10 21:29:53 · 663 阅读 · 0 评论 -
【算法】动态规划——入门篇
转载地址:https://blog.csdn.net/baidu_28312631/article/details/47418773动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当...转载 2018-08-10 21:28:59 · 154 阅读 · 0 评论 -
【算法-位图法】在海量数据中查找重复元素
什么是位图法?举个简单例子,在java中一个int类型的数有32位,而这32只表示一个数太过浪费,于是就考虑让这32位可以表示32个数,每一位表示该数是否存在,例如:这里用16位的二进制就能表示十六个数字,1表示存在,0表示不存在,上图就表示存在(16,12,6,4,1)这五个数。在海量数据中查找重复出现的元素或者去除重复出现的元素也是常考的问题。针对此类问题,一般可以通过位图法...原创 2018-08-01 22:42:31 · 3170 阅读 · 0 评论 -
【数据结构】二叉树
定义二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空二叉树的性质性质1:二叉树第k层上的结点数目最多为2^(k-1)(k>=1)性质2:深度为k的二叉树至多有2^k-1个结点(k>=1)性质3:包含n个结点的二叉树的高度至少为(log2n)+1性质4:在任意一棵二叉树中,若终...原创 2018-08-14 09:46:00 · 350 阅读 · 0 评论 -
【算法-字符串】输出字符串的所有组合
问题描述:假设字符串中的所有字符不重复,如何输出字符串的所有组合,例如,输入字符串为“abc”,则输出a、b、c、ab、ac、bc、abc,共7种组合。根据题意,如果字符串中有n个字符,根据排列组合的性质,此时一共需要输出2^n-1种组合。最容易想到的方式是递归,遍历字符串,每个字符串只能取或不取。若取该字符,就把它放到结果字符串中,遍历完毕后,输出结果字符串。程序代码为:...原创 2018-08-01 11:50:23 · 5351 阅读 · 1 评论 -
【算法-链表】单链表是否有环及环入口点
这篇文章图画的很详细,这里就直接转载了,偷个懒https://www.jianshu.com/p/ef71e04241e4不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。2.思考2.1判断是否有环如果链表有环,那么在遍历链表时则会陷入死循环,利用这个特征,我们可以设计这样的算法。使用一个slow指针,一个fast指针。 slow指针一次往后遍历以1个节点,f...转载 2018-07-31 11:25:12 · 225 阅读 · 0 评论 -
【算法-数组】找出数组中只出现一次的数字
问题描述:一个整型数组里除了一个数字之外,其他数字都出现了两次。找出这个只出现1次的数字。要求时间复杂度是O(n),空间复杂度是O(1).解题思路:题目强调只有一个数字出现一次,其他数字出现了两次,首先想到的是异或运算,根据异或运算的定义可知,任何一个数字异或它自己等于0,所以从头到尾异或数组中的每一个数字,那些出现了两次的数字全部在异或中被抵消掉,最终的结果刚好是这个只出现1次的数...原创 2018-07-31 09:49:23 · 810 阅读 · 0 评论 -
【算法】冒泡排序
冒泡排序假设,有一个数组初始状态为 2,5,8,4,3,1 下面给出排序的过程:程序代码:public class BubbleSortClass{ public static void main(String[] args){ int[] array={2,5,8,4,3,1}; for(int i=0;i<array.length;i++){ ...原创 2018-09-27 19:32:34 · 235 阅读 · 0 评论