随笔分类 - 算法
摘要:数据结构 本篇文章基于《算法 第四版》第三章,二叉搜索树,我们的树节点是这样的: private class Node { Key key; Value value; Node left; Node right; public Node(Key key, Value value) { this.ke
阅读全文
摘要:面临找工作的我不得不重新刷起数据结构与算法...... 问题:TopK元素 非常经典的一个问题,就是给你一堆乱序的数,从中找出其中的TopK。 直接查找 假设K为1,那么很容易想到维护一个max变量并扫描所有数,对于每一个数,与这个max变量比较,如果比它大就将它设置给max,很容易想到这种情况下的
阅读全文
摘要:二叉树迭代遍历的思路,下面的代码是中序遍历: public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList(); Stack<TreeNode> stack = new Stack(
阅读全文
摘要:七桥问题 看上面的无向图,七桥问题就是存不存在一条道路,能够完整地不重复的走完这些边。 欧拉回路和欧拉路径 欧拉路径就是满足上面问题的一个通路,如果这个通路还是一个回路,称为欧拉回路。 首先,不管图是什么样的,要满足欧拉回路,首先图得是连通图,这是基本条件,本篇默认所有图都是连通的,包括应用题中的输
阅读全文
摘要:题目描述 设F是一个森林,B是由F转换得到的二叉树,F中有n个非终端节点,则B中右指针域为空的节点有______个? 答案是n+1 思路 首先F是一个森林,未规定森林中树的度,就是里面可能有任意叉的树。 要把森林转换成二叉树,首先得把森林中的树一个一个转换成左子右兄弟表示的二叉树,再把它们接到一起。
阅读全文
摘要:HOJ 2058 The sum problem Problem Description Given a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of t
阅读全文
摘要:在算法竞赛中,我们难免用到一些数据结构,比如集合,映射啥的,这时候,最好的选择就是直接使用STL库中自带的数据结构。 这里总结一些算法竞赛中常用的STL套路,来自《算法竞赛入门经典——刘汝佳》。 这篇笔记不会介绍STL的基础用法,只记录一些技巧。 标准化存储 反片语(Ananagrams,Uva 1
阅读全文
摘要:Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题: 有排成一行的n个方格,用红(Red)、粉(Pink)、
阅读全文
摘要:在一般情况下,二叉树的查找效率很高,但在极个别情况下会出问题,这依赖于输入数据的顺序。 如果我们给BTree<Char,Int>(代表键是字符值是整数的二叉树)插入这样一串数据:[1,2,3,4,5],那我们得到的二叉树就是这样的。 二叉树退化成了链表,而我们查找一个数据的时间复杂度也退化成了$O(
阅读全文
摘要:题目RootedTree 《挑战程序设计竞赛2 算法和数据结构》中8.2章中有这样一道题。 请编写一个程序,输出给定有根树T中各节点u的信息,信息内容如下。 u的节点编号 u的节点种类(根、内部节点、叶) u的父节点编号 u的字节点列表 u的深度 输入 第一行输入结点的个数n,接下来n行按照下述格式
阅读全文
摘要:META URL: Leetcode.19 删除链表的倒数第N个节点 难度: 中等 分类: 链表操作 描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3-
阅读全文
摘要:本篇笔记基于Java语言,是《算法 第四版》的读书笔记,为了适当简化,部分内容和原书有出入。 单词查找树和符号表差不多,符号表允许存入任意类型的键值对(当然Key是要实现了Comparable接口的)。符号表可以用二叉查找树实现。 单词查找树差不多,只不过它的键被固定为 类型。它用字符串的特性来实现
阅读全文
摘要:META URL: Leetcode.17 电话号码的字母组合 难度: 中等 分类: 回溯算法 描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "
阅读全文
摘要:上一篇笔记记录了另一个单源最短路径算法 算法,本篇的部分内容依赖上一篇笔记。最好先看上一篇。 "单源最短路径(Bellman Ford算法)" 算法可以运行在带负权重的边上,因为存在负权重,所以记录节点的最短路径估值d不是递增的,最短路径树后面的节点的d可能比前面的节点还小,这就让我们必须在算法上多
阅读全文
摘要:单源最短路径和广度优先搜索要做的事很像。 关于广度优先搜索可以看 "图算法" 这一篇笔记。 单源最短路径给定一个源s,当算法执行完毕,找出从源s到图中的每个顶点权重最小的一条路径。 其实广度优先搜索可以看作特殊情况的单源最短路径,在广度优先搜索解决的图中,所有的边权重都为1。 注意: 本篇笔记说的最
阅读全文
摘要:## META* **URL**: [Leetcode.05 最长回文子串](https://leetcode-cn.com/problems/longest-palindromic-substring/)* **难度**: 中等* **分类**: 动态规划,字符串## 描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。```示例 1:输入: "babad...
阅读全文
摘要:最小生成树是一个图问题。 我们有一个带权重的无向图,找到一个权重最低的路径连通无向图中的所有节点,这条路径如果展开看的话就是一棵树,这棵树就是最小生成树。 权重为边的一个属性,在最小生成树问题里,你可以理解为如果要通过这条边所需要的花销,当然权重具体表达的含义还得看具体问题。比如在寻找最短路径问题中
阅读全文
摘要:之前写过一篇图的笔记,但是当时了解的还是不够深入,当时读那本算法都是递归实现的,我看的也有点懵逼。最近再看算法导论,正好看到图了,再记一遍。> 本篇笔记使用Python代码实现图可以分为有向图和无向图,区别从名字可以看出。我们先看看图的实现方式,图有两种常见的实现方式,邻接链表和邻接矩阵。