数据结构算法
xx润物细无声
这个作者很懒,什么都没留下…
展开
-
深度优先遍历(先序、后序、中序)非递归实现(C++)
二叉树的深度优先遍历递归实现很简单,只要调整调用顺序就分别能得到先序、后序、中序遍历的结果。这里记录下非递归的思想(都用到了栈)并给出代码。 先序遍历:根-左-右 栈是先进后出的,希望以根-左-右的顺序出栈,我们首先将根节点压栈,然后弹出(根),在弹出的同时,分别压入右子树的根节点和左子树的根节点,以保证先弹左后弹右,接下来弹出栈顶元素,并将其右、左子树的根...原创 2019-10-14 17:29:03 · 633 阅读 · 0 评论 -
最长重复子串(C++)
题目描述:给定两个字符串,求解两者的最长重复子串(长度),有的最长重复子串不是唯一的,给出一个最长的即可。例:abfjgk anrfgll两者的最长重复子串为 afg (3)。算法点睛思想:str1前x子串与str2前y子串长度:C(x,y)={C(x−1,y−1)+1,str1[x]=str2[y]max[C(x−1,y),C(x,y−1)],str1[x]≠str2[y]C...原创 2019-08-07 15:11:35 · 2625 阅读 · 2 评论 -
矩阵中全为1的矩形面积的最大值
问题描述:给定一个矩阵,该矩阵中的元素只包含1和0,找出该矩阵中全为1的矩形面积的最大值。如:1 1 0 0 01 0 0 0 11 0 0 0 1对应的矩形面积的最大值为3。整体思路:通过求解每列中到当前行的连续1的个数,然后将该题转化为求解柱状图最大面积问题。举个栗子:1 1 0 1 01 0 1 1 11 0 1 0 1计算每列中到当前行的连续1的个数得到:1 ...原创 2019-08-12 14:09:56 · 3656 阅读 · 0 评论 -
求解柱状图中的最大面积
问题描述:解决思路:C++实现代码//在这里插入代码片原创 2019-08-12 14:14:03 · 1430 阅读 · 2 评论 -
堆排序极简思想
1、构建大(小)顶堆 以上是一个大顶堆示意图(后续均以大顶堆为示例),用完全二叉树来表示,每个根节点的值均不小于其左右子节点(如果有左右子节点)的值。使用完全二叉树可以简化我们的代码,完全不用使用其它的数据结构,用数组表示就足够了,规则就是以深度遍历顺序存储(上图存储即为{14,12,13,9,7,10,8,1,3,4,5,8,6,6},下图则为{7,9,4,1,14,8,13,...原创 2019-09-05 12:13:54 · 493 阅读 · 1 评论 -
STL中vector相关方法
vector<int> a,b;a.empty() 是否为空(布尔)a.push_back() 向vector中追加a.size() 返回长度a.begin()返回迭代器vector<int>::iterator,指向第一个元素a.end()返回迭代器,指向最后一个元素的下一个元素sort(a.begin(),a.end()) 排序所有元...原创 2019-09-27 15:25:04 · 156 阅读 · 0 评论 -
计算两个有序数组的中位数(C++)
题目描述:计算两个有序数组的中位数,至少一个数组不为空。要求时间复杂度O(log(m+n)),m、n分别为两个数组的长度。如: {1,2} {3} 输出应为2 {1,3} {2,5} 输出应为2.5题目分析: 时间复杂度要求为log级别,数组又都是有序的,容易联想到二分,每次比较去掉一部分元素。 数组中位数第一反应是需要分奇...原创 2019-10-10 17:55:38 · 1072 阅读 · 0 评论