随笔分类 -  数据结构与算法

摘要:双向链表描述 双向链表也叫双链表,它的每个数据结点都有两个指针,分别指向前驱结点和后继节点,同时有一个数据域来保存数据,双向链表的图示如下: 从图片可以看出,双链表的头结点的前驱结点和尾结点的后继结点为空,这一点要注意,对双链表的操作要检查这两种情况。 双向链表结构 每个数据结点都有两个指针,分别指 阅读全文
posted @ 2023-11-02 10:11 mingshan 阅读(63) 评论(0) 推荐(0)
摘要:在维基百科中,关于分治算法(divide-and-conquer)的介绍如下:在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个概念 阅读全文
posted @ 2023-11-02 10:09 mingshan 阅读(160) 评论(0) 推荐(0)
摘要:这里有n个房子在一列直线上,现在我们需要给房屋染色,共有k种颜色。每个房屋染不同的颜色费用也不同,你希望每两个相邻的房屋颜色不同 费用通过一个nxk 的矩阵给出,比如cost[0][0]表示房屋0染颜色0的费用,cost[1][2]表示房屋1染颜色2的费用。 样例: 输入: costs = [[14 阅读全文
posted @ 2023-11-02 10:08 mingshan 阅读(104) 评论(0) 推荐(0)
摘要:一条包含字母A-Z 的消息通过以下映射进行了 编码 : 'A' -> 1 'B' -> 2 ... 'Z' -> 26 要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" 阅读全文
posted @ 2023-11-02 10:07 mingshan 阅读(96) 评论(0) 推荐(0)
摘要:先来看一下这道题简化的描述: 现有2元,5元,7元三种硬币,假设硬币都足够多,现求解:最少用多少枚上述硬币拼出27块钱? 递归解法 看到这个问题,我们一下子就可以想到一个树形结构,27块钱可以分别减去上面三种硬币的面额,剩下的值可以继续减去上面三种硬币的面额,直至无法再减,计算出刚好能减完的路线(从 阅读全文
posted @ 2023-11-02 10:07 mingshan 阅读(93) 评论(0) 推荐(0)
摘要:ArrayQueue假溢出 我们在利用数组实现队列的时候,发现数组队列会出现假溢出问题,即队列还没有满,但不能再往队列中放入元素了,如下图所示: 在数据进行出队的时候,每一个元素出队,指向队列头元素的head就会向后移动,导致head之前的元素被“遗忘”了,无法再次利用,出队的代码如下: @Over 阅读全文
posted @ 2023-11-01 15:03 mingshan 阅读(45) 评论(0) 推荐(0)
摘要:最近看到邓公讲利用栈来求解中缀表达式的课程,讲的十分清楚,由于课程是用c++写的代码,我这里用Java简单实现下。 中缀表达式是一个通用的算术或逻辑公式表示方法。我们平时做的四则运算将数字与运算符拼接起来就是中缀表达式。算法思想比较清晰明了,下面我列下算法过程: 首先创建两个栈,一个是操作符栈,用于 阅读全文
posted @ 2023-10-31 16:57 mingshan 阅读(260) 评论(0) 推荐(0)
摘要:二叉树定义 二叉树(Binary Tree)是n(n >= 0)个结点所构成的集合,它或为空树(n=0);或为非空树,对于非空树$T$: 有且仅有一个称之为根的结点 除根节点以外的其余结点分为两个互不相交的子集$T_1$和$T_2$,分别称为$T$的左子树和右子树,且$T_1$和$T_2$本身又是二 阅读全文
posted @ 2023-10-30 15:07 mingshan 阅读(90) 评论(0) 推荐(0)
摘要:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树),它具有以下特点: 若任一节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任一节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节 阅读全文
posted @ 2023-10-30 15:07 mingshan 阅读(41) 评论(0) 推荐(0)
摘要:第一个看到树状数组(Binary Indexed Tree)这个数据结构时,真的被吸引了,设计真是简洁,属于理论很复杂,但实现不复杂的那种算法。该算法多用于高效计算数列的前缀和, 区间和动态单点值的修改。要理解树状数组的工作原理,必须要知道二进制的运算法则,比如 &、 -、补码和反码等。下面先介绍下 阅读全文
posted @ 2023-10-30 15:06 mingshan 阅读(110) 评论(0) 推荐(0)
摘要:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 $O(logn)$。所以我们可知,AVL树首先是二叉查找树(BST),不了解BST的同学可以了解一下,因为AVL 阅读全文
posted @ 2023-10-30 15:03 mingshan 阅读(33) 评论(0) 推荐(0)