数据结构与算法
文章平均质量分 96
~无关风月~
手在键盘敲很轻
展开
-
二叉树
1、层次遍历二叉树时,输出完一行的节点后换行。 在原有使用队列层次遍历二叉树的基础上,增加两个变量lastNode 指向当前行的最右节点nlastNode 指向下一行的最右节点此处遍历时,每当输入输出一个节点后,将把此节点的左右孩子压入队列,压入队列时,让 nlastNode 跟踪入队的节点 然后判断 刚输出的节点是否是当前行的最右节点,如果是,就换行,此时 nlastN...原创 2018-05-18 09:37:02 · 196 阅读 · 0 评论 -
KMP算法详解
对一个串(主串)中某个子串(模式串)的定位操作称为串的模式匹配。主串长度大于等于子串长度。暴力的方法:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后续字符;否则从主串的第二个字符开始,重新与模式串第一个位置开始比较,直到比较完模式串的所有字符,则成功,返回模式串在主串中的位置,否则返回-1。暴力方法穷举了所有可能的匹配情况,时间复杂度为 O(m*n),m 和 n 分别...原创 2015-11-19 00:20:07 · 520 阅读 · 0 评论 -
并查集详解 (转)
转自:http://blog.csdn.net/dellaserss/article/details/7724401并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在转载 2016-02-24 16:44:19 · 407 阅读 · 0 评论 -
棋盘覆盖问题--分治法
棋盘覆盖问题。有一个 2k∗2k2k∗2k2^k∗2^k 的方格棋盘,恰有一个方格是残缺的。你的任务是用包含3个方格的L型牌覆盖所有剩余方格。残缺方格不能被覆盖,且任意一个完整方格不能同时被两个或更多牌覆盖。如图所示为L型牌的4种旋转方式。当 k=1 ,残缺方格位置为 (0,1) 时,棋盘如图: 当 k>0 时,将 2k∗2k2k∗2k2^k∗2^k 棋盘分割为4个 2k−1...原创 2018-05-16 10:50:02 · 1783 阅读 · 0 评论 -
java实现常用排序
Java实现:冒泡排序、选择排序、插入排序、希尔排序、二分排序、快速排序、归并排序、堆排序、计数排序、 桶排序、基数排序原创 2018-04-13 11:09:09 · 354 阅读 · 0 评论 -
从 递归 到 动态规划
动态规划的本质是递归加上缓存!原问题(N)->子问题(N-1)->原问题(N)特点:有 最优子结构子问题最优决策可导出原问题最优决策无后效性有 重叠子问题去冗余空间换时间(加缓存)问题共性:套路 题中出现: 最优、最大、最小、最长、计数是 离散问题 容易设计状态(如01背包问题)最优子结构 N-1 可以推导出 N LeetC...原创 2018-06-09 22:51:59 · 1893 阅读 · 1 评论 -
贪心与动态规划的区别
贪心算法:解决的问题:最优化问题期望通过局部最优解得到全局最优解每一步选择:当前最佳证明有效,需要严格的数学证明证明无效,只需找到一个反例暴力搜素、动态规划、贪心 的区别:搜索:遍历每一条可能的分支动态规划:记忆化搜索,重叠子问题只计算一次贪心:不解决所有可能的子问题,贪心地选择其中一个动态规划就是暴力搜索加缓存(记忆化搜索),暴力搜素是自顶向下,动态规划是自低...原创 2018-06-18 19:21:47 · 7632 阅读 · 2 评论 -
Trie 树(字典树)是什么
字典树(Trie)可以保存一些 字符串->值 的对应关系。 基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。查询的复杂度是O(len),le...原创 2018-09-02 11:48:58 · 470 阅读 · 0 评论