算法与数据结构
文章平均质量分 59
早就戒了
这个作者很懒,什么都没留下…
展开
-
动态规划:最长子序列问题
关于动态规划中的最长子序列问题有很多优秀的解读,在这里推荐一位博主的关于最长子序列的文章,非常不错,配有大量的图片和文字解答,在这里推荐给大家。[本文章转载自这里](http://blog.csdn.net/hrn1216/article/details/51534607)1.基本概念 首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longes转载 2017-12-14 21:26:23 · 5780 阅读 · 4 评论 -
面试中遇到的手撕代码(二)
8.栈的最大值问题问题的描述和思路可以参考这里Java实现代码如下:import java.util.Stack;/** * 栈的最大值问题 Title: Description: Company: * * @author 郑伟 * @date 2018年4月12日下午8:57:29 */public class SpecialStack { Stack<Integer> sta原创 2018-04-12 21:36:45 · 2117 阅读 · 0 评论 -
面试中遇到的手撕代码题(一)
1.重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。根据二叉树的性质: public class Rebuild_Tree { public TreeNode reConst...原创 2018-04-01 12:58:35 · 15893 阅读 · 0 评论 -
动态规划案例解析
此文总结了本人在刷LeetCode是遇到的动态规划问题以及对应的解法。word-breakGiven a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For ...原创 2018-03-01 16:02:36 · 357 阅读 · 0 评论 -
DFS原理与案例
最近刷leetcode时遇到了好多DFS的题目,一开始的迷茫,只能看着答案一步一步的分析,而现在,对于DFS这类题目有了自己的一些见解。 首先DFS是什么呢? D—depth,F—first,S—serach,形象一点的讲法就是一条道路走到黑,直到走到终点或者前面没有路,可以理解为一根筋。DFS算法大同小异,只要抓住其核心思想,那么关于DFS的题目在你看来就像是一个模子刻出来的。那么其原创 2018-01-28 15:55:35 · 491 阅读 · 0 评论 -
贪心算法例题
简介贪心算法(greedy)分阶段地工作,在每一个阶段都可以认为所做的决定是最好的,而不用考虑后果。这就意味着得到的是局部最优解决方案,当算法结束时,如果一个一个局部最优解能组成全局最优解决,那么就说明这个算法是正确的;如果不是,则此算法的到的结果就是一个次优解。因此,如果使用贪婪算法得到问题的最优解,那么问题就必须满足一定的条件。找零钱问题这个问题在我们的日常生活中非常普遍了。假设1元、2元、5元原创 2017-12-18 13:24:23 · 848 阅读 · 0 评论 -
使用位运算实现加减乘除
经常看到类似”不使用XXX符号的前提下,实现加、减、乘、除“?第一次遇见的同学可能会懵,如果你记起来一个叫位运算的东西就会豁然开朗了。算法概述加法:比如5+6。小学的时候数学老师告诉我们的是,先求不算进位的值,也就是1,然后再将进位结果(这里是1)加入,直到进位为0。使用位运算也是同样的道理。只不过我们对于进位和不进位的结果的产生感到陌生而已。位运算中两个数相加的不进位结果:a^b,进位结果a&b;原创 2017-12-25 17:40:45 · 510 阅读 · 0 评论 -
红黑树的删除—10张图学会
如果要学红黑树,那么就必须知道二叉树,毕竟红黑树本身就是一个二叉搜索树。只不过红黑树比一般的二叉搜索树更加稳定,也就是更加平衡,但是有没有AVL树那么的稳定,这换来的是红黑树比AVL数有更好的插入和删除效率,但是查找效率并没有比AVL差很多。下文我将用RBT代替红黑树。二叉搜索树的删除介绍RBT的删除,就先要知道二叉搜索树的删除(知道的同学可以直接跳过)。删除分为四步: 1.找到删除点假设为X原创 2017-12-23 15:21:12 · 15062 阅读 · 11 评论 -
红黑树的插入3张图让你学会
红黑树的插入相比较其删除是比较简单的。总的分为两步: 第一步,找到节点位置,插入节点即可,默认插入的节点是红色的(这样不会影响平衡)。 第二步,将调整颜色,避免出现红—红的出现,这是红黑树不允许的。再次强调红黑树的定义: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (原创 2017-12-24 17:26:55 · 321 阅读 · 0 评论 -
动态规划之01背包问题
最近刷leetcode时遇见了好几道动态规划,因此对如何解动态规划这类题目也稍有心得。什么是动态规划?可能大家都知道官方的具体解释,巴拉巴拉一堆解释。而在我看来,动态规划就是一种对于问题的拆分。将一个问题拆分成一个一个子问题,总问题的解决办法就依靠着这些子问题的解决而解决。好比你爬上10层楼,你需要先解决1楼到2楼,2楼到3楼。。。。。。最后9楼到10楼。状态转移方程怎么来的?问题描述: 有编号分原创 2017-12-07 11:41:34 · 341 阅读 · 0 评论 -
TopK问题的Java实现
面试中会经常遇到手撕代码的情况,而求TopK的是经常遇到的题目。下面我就用Java来实现。主要通过两种方法实现,快排思想以及堆排序的思想,两者的复杂度为O(NlogK)。基于快排的TopK实现:import java.util.Arrays;/** * 使用快排实现的TopK问题 Title: Description: Company: * * @author 郑伟 * @date 201原创 2018-04-11 10:57:11 · 2753 阅读 · 0 评论