
数据结构
文章平均质量分 65
豆芽炒粉丝
世上万事,不过一拖二闹三不读书。
展开
-
转载: 数据结构之图(存储结构、遍历)
一、图的存储结构1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图左就是一个无向图。 从上面可以看出,无向图的边数组是一个对称矩阵。所谓对称转载 2015-07-16 09:55:24 · 624 阅读 · 0 评论 -
LeetCode111:Minimum Depth of Binary Tree
DFS系列思路: 1.边界条件:如果树为空,则返回 2.满足条件的解:当到达叶子节点时,即左右子树为空,则比较当前的深度与所记录的最小深度,若比最小深度小,则更新最小深度,否则不执行。 3.如果左子树不为空则进行搜索,如果右子树不为空则进行搜索。public class Solution { public int minDepth=Integer.MAX_VALUE; publ原创 2016-12-09 16:29:51 · 312 阅读 · 0 评论 -
LeetCode 20:Valid Parentheses
符号匹配问题,使用栈解决即可。 当为’(‘,’[‘,’{‘时,入栈即可,当遇到’)’,’]’,’}’时,当栈不为空则进行出栈操作,判断是否匹配。例如遇到’)’时,栈不为空且出栈的字符为’(‘即表示匹配,否则返回false检查字符是用==,检查String是用.equals(),因为String是引用类型,值相等但是地址可能不等。public class Solution { public原创 2016-12-08 21:28:51 · 263 阅读 · 0 评论 -
中缀表达式改后缀表达式
我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2”叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最终输出后缀表达式为止中原创 2016-10-11 11:23:42 · 630 阅读 · 0 评论 -
Asymptotic Analysis——渐近分析
上图主要介绍的是渐进分析的动机是什么。高级推理算法的“灵魂”(翻译水平有限,不知道合适不合适,若有好的翻译请告诉我,或者你直接看英文原版吧)不关注架构/语言/编译器的相关细节(意为只关注算法本身)对于不同算法的比较特别有用,尤其是在大型输入(例如排序或整数乘法) 不关注常数因子和低阶项,举了一个例子 6nlog2n+66nlog_2n+6去除常数因子6和低阶项6得到nlognnlogn,用原创 2016-09-06 15:10:54 · 8505 阅读 · 0 评论 -
汉诺塔(Hanoi)递归算法笔记记录
汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图找了张5个的,意思一样)。有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。 分析: 以原创 2016-09-06 08:29:15 · 2261 阅读 · 0 评论 -
Java算法之简单排序算法笔记记录
本篇主要记录冒泡排序,选择排序,插入排序。冒泡排序算法思想: 如下图,先比较0与1位置上的运动员身高,若0位置身高大于1位置身高,则0与1位置上的运动员交换位置,然后从1位置开始,比较1与2位置上运动员的身高,以此类推,直至到位置9。此时,9已经是最高的了,属于有序状态,所以下次比较的时候,只需要从0位置开始比较,直至位置8即可。 不变性: 我们发现,每次经过一轮比较后,总会有一个运动员的原创 2016-08-08 11:13:25 · 736 阅读 · 0 评论 -
Java算法之链表笔记记录
本篇主要介绍一种新的数据存储结构——链表。链表可能是继数组之后第二种使用得最广泛的通用存储结构。 链表的机制灵活,用途广泛,适用于许多通用数据库。它也可以取代数组,作为其他存储结构的基础,例如栈,队列。除非需要频繁通过下标随机访问各个数据,否则在很多使用数组的地方都可以用链表代替。链结点在链表中,每个数据项都被包含在“链结点”(Link)中。一个链结点是某个类的对象,这个类可以叫做Link。因为一原创 2016-09-04 13:55:24 · 2489 阅读 · 0 评论 -
动态规划(Dynamic Programming)学习笔记记录
要了解DP,需要知道递归的知识和基本的暴力搜索。定义:本质:递归原问题(N)->子问题(N-1)->原问题(N)最优子结构子问题最优决策可导出原问题最优决策 无后效性重叠子问题去冗余 空间换时间(注意分析时空复杂度)基本步骤: 四个步骤设计暴力算法,找到冗余 设计并存储状态(一维,二维,三维数组,甚至用Map) 递归式(状态转移方程) 自底向上计算最优解(编程方原创 2016-09-14 19:23:13 · 1814 阅读 · 0 评论 -
蜂巢晶格_Honeycomb Lattice Triangular Lattice初始化邻居信息
背景: 复杂网络上的博弈。使用的网络模型: 蜂巢晶格,也成Triangular lattice逻辑示意图: 每个点有3个邻居,示意图: 问题: 现有40000个节点,分布在蜂巢晶格中,每个点有3个邻居,需要将它们存储在一个二维数组中,蜂巢晶格中的点的id是如何确定?例如说: 按照从左到右(0开始),从上到下的顺序,举例:我需要通过id为7的节点,就能得到他的3个邻居,比如说player[原创 2016-08-04 16:51:15 · 2155 阅读 · 0 评论 -
LeetCode 144: Binary Tree Preorder Traversal
Q: Given a binary tree, return the preorder traversal of its nodes’ values.前序遍历: 根左右/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr原创 2016-10-03 10:58:13 · 379 阅读 · 0 评论