数据结构
文章平均质量分 72
肩上杯雪
自强不息,知行合一
展开
-
LeetCode面试题 17.13 回复空格
题意:给定一个字典,里面包含一些string,给定一个句子,从中匹配最多的字典中的string。输出未匹配的最少的字符数。思路:动态规划 + 字典树(1)动态规划dp[i] 代表 前i个字符未匹配的最少字符数。当遍历到第i个字符时,判断从 j 到第i个字符是否在字典中,如果在字典中,则dp[i] = min(dp[i], dp[j-1])。为什么是 dp[j-1],因为第j个字符到第i个都在字典中,所以是前 j-1个字符的未匹配最少字符数。若没在字典中匹配,则 dp[i] = dp[i-1.原创 2020-07-09 23:46:48 · 188 阅读 · 0 评论 -
LeetCode 108. 将有序数组转换为二叉搜索树
题意:给定一个有序数组,要求转化为二叉搜索平衡树。思路:我们知道,二叉搜索树的中序遍历是有序的,所以题目相当于给定中序遍历,创建一个二叉平衡树。如果是一个无序数组,我们创建二叉搜索树时,每插入一个节点都要进行二分查找寻找合适的位置,但因为已经有序,所以每次选择一个根节点,左边的数就是左子树,右边的是右子树。因为需要一个平衡树,所以选根节点的时候选中间的节点即可。如果是奇数就选中间的数,偶数就选左边的。选中间的节点,可以保证左右子树的节点数相差不超过1,那么为什么可以保证平衡呢?因为树的定义都是递.原创 2020-07-03 11:44:50 · 203 阅读 · 0 评论 -
判断二叉树是否是平衡二叉树
前言本次首先是输入前序+ 中序遍历,创建一个二叉树,然后再判断其是否是平衡二叉树。如果创建,本贴不会讲,有意向的可以参考以下帖子:https://blog.csdn.net/qq_39763472/article/details/106976494思路:首先考虑到平衡二叉树的定义:对于每一个节点,它的左子树和右子树的高度之差不超过1。可以看出,是递归定义的,所以我们通过递归程序,先计算左子树高度,再计算右子树高度,如果相差小于1,则递归判断 左右子树 都是不是平衡二叉树。代码1、两个函.原创 2020-06-27 10:43:22 · 271 阅读 · 0 评论 -
计算二叉树带权路径和(WPL)
前言二叉树的带权路径和,指的是二叉树的所有叶子节点的权值 * 其深度 之和。本次因为是完整的程序,所以包含1)输入前序、中序序列 创建二叉树2)层序遍历打印出二叉树3)计算WPL数据结构定义typedef struct Node* List;typedef struct Node{List l, r;int data;};创建二叉树1、变量说明int n; // n是二叉树的节点数vector preorder(9), inorder(9); //前序和..原创 2020-06-26 23:54:03 · 2258 阅读 · 0 评论 -
LeetCode 21 合并两个有序链表——归并
链接 :原题题意 : 两个有序链表进行合并。思路:这个是经典的数据结构链表题,考研的时候在王道里面看到过,是一种经典的归并思想,也就是迭代。用的是尾插法。如果两个链表 l1 和 l2都不为空,那就比较两个数,较小的插入到 ans 表尾,更新节点,直到其中有一个链表为空。然后省下来的那个不为空的再逐渐添加到后面。代码:/** * Definition for singly-li...原创 2020-05-01 17:17:31 · 180 阅读 · 0 评论 -
LeetCode 117 填充每个节点的下一个右侧节点指针
链接 : 原题题意:给定一个二叉树结构:使其每一个节点的next指针都指向其右侧的节点;如果右侧没有节点,就指向NULL。如图:思路:因为是给同一层的节点加上next,所以层序遍历即可。使用queue ,对每一层的节点,每次取出两个(如果是最后一个节点就特判,指向NULL),让前一个指向后一个即可。代码:class Solution {public: ...原创 2020-04-28 18:15:38 · 113 阅读 · 0 评论 -
二分查找算法的理解
前言在做LIS的O(nlgn)算法时,用到了二分查找算法。对于其中的一些条件,例如 l<r 和 l <= r 的区别,r = mid和r = mid-1的区别等等不是很了解,于是进行了一些学习。找第一次的出现位置二分查找因为有几个限制,其中一个便是 单调序列 这个要求,所以可能出现 2 3 4 4 4 5 6这样的数组,那么返回第一个出现的位置便是 i = 3时。i0...原创 2019-03-19 19:28:45 · 672 阅读 · 0 评论 -
HDU 1232——畅通工程 并查集入门题(附带并查集板子)
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=1232题意 :给定你n个村庄以及m条路,每条路连接两个村庄,求还需要最少多少条路使得任意两个村庄之间互相可以到达(直接间接都可以)。思路 : 这是一道并查集经典的入门题,可以看这些村庄有多少个连通分量,然后连通分量的个数- 1即为答案如图所示,这是第一个样例,节点1 3 4即为一个连通分量,...原创 2018-09-30 20:06:17 · 317 阅读 · 0 评论 -
HDU 5723 Abandoned country
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5723题意 :有n个村庄,m条道路,每条道路有一个权值,现求最小的权值和使得所有村庄可以连通。并且求任意两点间距离的期望值。思路 :第一问,最小权值和,毫无疑问是最小生成树。这里我用的是Kruskal算法。对最小生成树不理解的同学可以去做hdu1863入门,这里是题解 https://blo...原创 2018-10-03 10:54:26 · 127 阅读 · 0 评论 -
HDU 1863——畅通工程 最小生成树入门题
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1863题意 : 给定n个道路和m个村庄,每条道路有一个权值,求最小的权值和,使得村庄间可以互相到达。思路 :本题是最小生成树的思想,这里我用Kruskal算法。对于一个无向带权图,每个节点都是独立的。步骤:1)将所有边按权值排序2)选取最小权值的边,判断边两端的点是不是属于一个集合,如果...原创 2018-10-02 09:14:57 · 284 阅读 · 0 评论 -
POJ 1182 ——食物链 经典并查集
题目链接 : http://poj.org/problem?id=1182题意 :有A,B,C三种动物构成环形的食物链,现给你M句话,每句话形式&quot;D X Y&quot;,1表示X和Y同类,2表示X吃Y。判断假话有多少句。其中 :1)与前面的话冲突 2)X和Y大于动物编号N 3)D =2 &amp;amp;&amp;amp;X =Y 是假话。思路 :这是一道经典的并查集题目。涉及到并查集,我们就针对这道题目设置并查集中...原创 2018-10-01 21:31:45 · 187 阅读 · 0 评论