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

摘要:链接地址:https://blog.csdn.net/zhangkunrun/article/details/38336543 B树相对于红黑树的区别 在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下的情况。为什么会出现这样的情况,我们知道要获取磁盘 阅读全文
posted @ 2018-09-03 10:41 追逐更好的自己 阅读(1009) 评论(0) 推荐(0)
摘要:1.memcpy函数 memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数; 函数原型:void *memcpy(void *dest, void *src, unsigned int count); 阅读全文
posted @ 2018-08-20 23:55 追逐更好的自己 阅读(5130) 评论(0) 推荐(1)
摘要:1.输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路:先通过先序遍历找到两棵树根节点相等得节点,然后进行从这两个节点开始递归判断是不是子结构。 2.求一棵树的镜像 思路:先序遍历这棵树的每个节点,如果遍历到的节点有子节点,就交换它的两个子节点。 3.给 阅读全文
posted @ 2018-08-07 21:59 追逐更好的自己 阅读(328) 评论(0) 推荐(0)
摘要:1.删除链表中等于给定值 val 的所有节点。 2.输入参数只有待删除节点。 阅读全文
posted @ 2018-08-07 09:22 追逐更好的自己 阅读(348) 评论(0) 推荐(0)
摘要:例如输入字符串"345",则输出整数345。 此题一点也不简单。不信,你就先不看一下的代码,你自己先写一份,然后再对比一下,便知道了。 1.转换的思路:每扫描到一个字符,我们把在之前得到的数字乘以10再加上当前字符表示的数字。这个思路用循环不难实现。2.由于整数可能不仅仅之含有数字,还有可能以'+' 阅读全文
posted @ 2018-08-02 22:59 追逐更好的自己 阅读(931) 评论(0) 推荐(0)
摘要:利用快排思想:先确定一个轴点,然后进行交换使得轴点左边的值比轴点小,轴点右边的值比轴点大,当我们找到轴点位于第N-K个位置的时候说明找到第K大的值。也可以反过来逆序。时间复杂度为O(N). 代码如下: 阅读全文
posted @ 2018-07-30 22:42 追逐更好的自己 阅读(234) 评论(0) 推荐(0)
摘要:1.朋友圈 班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 阅读全文
posted @ 2018-07-26 22:33 追逐更好的自己 阅读(378) 评论(0) 推荐(0)
摘要:1.岛屿的最大面积 2.岛屿的个数 阅读全文
posted @ 2018-07-26 20:33 追逐更好的自己 阅读(375) 评论(0) 推荐(0)
摘要:思路: 1.新建,map<string,vector<string>> 2.遍历字符串数组里的每个字符串 把每个字符串进行排序 排序后的字符串,作为key,去查找并添加进map<string,vector<string>> 3.最后,输出map<string,vector<string>> 里的所有 阅读全文
posted @ 2018-07-24 22:15 追逐更好的自己 阅读(496) 评论(0) 推荐(0)
摘要:思路:按照从外圈到内圈开始旋转。根据矩阵左上角和右下角确定一圈,然后交换矩阵中数字。 阅读全文
posted @ 2018-07-24 21:19 追逐更好的自己 阅读(702) 评论(0) 推荐(0)
摘要:DP操作建模 dp[i][j]代表字符串word1[0...i-1]与word2[0...j-1]的最小编辑距离。 对于编辑距离的三个操作来说: 插入举例:X:=ex VS Y:=exp 前面的两个ex都是相同,则编辑距离不变为0,X没有第三个字符,这里如果我们插入了一个字符即可。dp[i][j]= 阅读全文
posted @ 2018-07-23 15:24 追逐更好的自己 阅读(175) 评论(0) 推荐(0)
摘要:先通过动态规划求出最小路径的值,然后根据dp二维数组倒推所走路径。参考找出最大公共子序列解法。 阅读全文
posted @ 2018-07-16 11:22 追逐更好的自己 阅读(2821) 评论(0) 推荐(0)
摘要:思路:如果限制空间复杂度为O(1),我们就无法采用哈希表的方法去求解。题目中数组中所以数字都在范围[0, N-1],因此哈希表的大小为N即可。因此我们实际要做的就是对N个范围为0到N-1的数进行哈希,而哈希表的大小刚好为N。对排序算法比较熟悉的同学不难发现这与一种经典的排序算法——基数排序非常类似。 阅读全文
posted @ 2018-07-16 10:07 追逐更好的自己 阅读(1532) 评论(0) 推荐(0)
摘要:思路:详见程序员面试指南 代码如下: 阅读全文
posted @ 2018-07-15 21:32 追逐更好的自己 阅读(212) 评论(0) 推荐(0)
摘要:最长公共子序列 思路:详见程序员代码面试指南 最长公共字串 dp[i][j]代表必须把str1[i]和str2[j]当作公共字串最后一个字符的情况下的公共字串长度。 最长递增子序列 阅读全文
posted @ 2018-07-13 14:37 追逐更好的自己 阅读(200) 评论(0) 推荐(0)
摘要:此类问题会有几种情况:现在列举其中几种1.让我们去求从一个点到另一个点的路径总数;2.列举出从一个点到另一个点的路径(可根据第一种情况的代码修改即可,一般是通过一个二维数组来记录每条路径);3.最短路径(涉及动态规划) 情况1的示例代码: 阅读全文
posted @ 2018-07-12 19:24 追逐更好的自己 阅读(871) 评论(0) 推荐(0)
摘要:用后序遍历的方法做,可以避免重复遍历节点。在遍历到一个节点之前就已经遍历了它的左右子树 代码如下: 阅读全文
posted @ 2018-07-11 21:54 追逐更好的自己 阅读(206) 评论(0) 推荐(0)
摘要:遇到此问题的时候,如果运行递归要返回值的话,一般可以这样写 return 后面接递归的函数。 题目一:数字在排序数组中出现的次数 题目二:二叉树的深度 阅读全文
posted @ 2018-07-11 20:29 追逐更好的自己 阅读(1816) 评论(0) 推荐(0)
摘要:方法一:采用归并的思想将链表两两合并,再将两两合并后的链表做同样的操作直到合并为只有一个新的链表为止。 归类的时间复杂度是O(logn),合并两个链表的时间复杂度是O(n),则总的时间复杂度大概是O(nlogn)。 方法二:利用了最小堆这种数据结构,我们首先把k个链表的首元素都加入最小堆中,它们会自 阅读全文
posted @ 2018-07-08 12:34 追逐更好的自己 阅读(445) 评论(0) 推荐(0)
摘要:直接通过中序遍历来解。但是需要设置两个节点记录每个子树排序后的第一和最后一个节点,尤其是最后一个,因为最后一个节点是由于连接所需。 上代码: 法二:(思路同上,但是更简洁) 阅读全文
posted @ 2018-07-07 11:03 追逐更好的自己 阅读(377) 评论(0) 推荐(0)