
数据结构
寻路人davey
Deep Learning/图像处理
展开
-
最长公共子序列(Longest Common Sequence)
问题的定义:子序列 –X=(A, B, C, B, D, B) – Z=(B, C, D, B)是X的子序例 –W=(B, D, A)不是X的子序例公共子序列 – Z是序列X与Y的公共子序列如果Z是X的子序 也是Y的子序列。最长公共子序列(LCS)问题输入:X = (x1,x2,…,xn),Y = (y1,y2,…ym) 输出:Z = X与Y的最长公共子序列蛮力法: - 枚举X的原创 2017-04-22 16:22:32 · 1095 阅读 · 0 评论 -
查找树中两个节点的最低公共祖先
求树中两个节点的最低公共祖先给定一棵树和两个节点,求解这两个节点在树中的最低公共祖先节点。(剑指Offer)思路: 从根节点遍历树,直到要查找的节点,保存从根节点到要查找的节点的路径。遍历两次树,即保存了根节点到要查找的两个节点的两条路径,然后求出两条路径的最后一个交点即可。C++代码实现:#include <iostream>#include <vector>#include <list>u原创 2017-08-02 20:56:37 · 820 阅读 · 0 评论 -
数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入{1,2,3,3,3, 3,4,5}和数字3,那么输出应该是4,因为3出现了4次。思路: 直接暴力求解时间复杂度为O(n) ,下面利用二分查找的思想,给出时间复杂度为O(logn) 的算法: 1. 利用二分查找的思想,找到第一个出现的K,时间复杂度为O(logn) ; 2. 利用二分查找的思想,找到最后一个出现的K,时间复杂度为O(logn)原创 2017-08-02 22:32:59 · 406 阅读 · 0 评论 -
求二叉树深度、判断是否是平衡二叉树
求二叉树深度:递归的方法:从根节点按照先序顺序遍历二叉树,返回左子树和右子树中较大的深度,再加上1就是根节点的深度。C++代码实现:typedef struct TreeNode{ int data; struct TreeNode* leftchild; struct TreeNode* rightchild;}TreeNode, *Bitree;int TreeMaxDe原创 2017-08-04 13:55:53 · 639 阅读 · 0 评论 -
快排、堆排序
快排:快速排序主要运用了二分的思想,每次选择一个基准元素,比基准元素打的元素都放在基准元素前面,比基准元素小的元素都放在基准元素后面,这样不断递归细分,完成排序。C++代码实现:void QuickSort(int a[], int l, int r){ int temp = a[l]; int i = l, j = r; if(l<r){ while(i<j原创 2017-08-04 18:10:55 · 388 阅读 · 0 评论