
面试题之庖丁解牛
文章平均质量分 74
YoungLeoo
生命不息 折腾不止!!!
展开
-
【面试题之算法部分】LCA最近公共祖先
问题描述:给定一棵二叉树T和两个节点u和v,找出u和v离根节点最近的公共祖先。首先我们将这个问题分成三种情况:情况一: 二叉树是二叉查找树。这种情况比较简单,将当前节点初始化为根节点,从当前节点开始,不断将当前节点的值和u节点的值、v节点的值作比较,如果当前节点值同时小于二者,则将当前节点的右孩子作为当前节点,继续比较;如果当前节点值同时大于二者,则将当前节点的左孩子作为当前节点,继续比较;如果当前原创 2015-08-24 16:28:23 · 983 阅读 · 0 评论 -
【面试题之算法部分】深入快速排序
本篇文章我将讲述快速排序的基本思想,实现,和时间复杂度的深入分析。基本思想:选取待排序列中的某个元素t,然后按照与该元素的大小关系重新整理序列中的元素,使得整理后的序列中排在t以前的元素均小于t,排在t以后的元素均大于等于t,我们将t称为划分元素。此时可以保证此时t的位置一定和最终有序序列t的位置相同,故我们可以选取t以前和以后的两个子序列作为新的序列去做同样的处理。不断递归去处理直至每个元素都调整原创 2015-08-24 18:22:40 · 2279 阅读 · 0 评论 -
【面试题之算法部分】字符串的全排列
首先可以确定的是字符串全排列算法的时间复杂度至少是O(n!),我们采用递归算法来解决该问题a.n个元素的全排列 = n-1个元素的全排列 + 另一个元素作为前缀b.如果只有一个元素的全排列,说明已经排完,输出数组c.不断将每个元素作为第一个元素,然后以这个元素作为前缀,并将其余元素继续全排列,等到一趟排完,还需要还原数组,继续下一趟#include #include原创 2015-08-16 14:30:08 · 872 阅读 · 0 评论 -
【面试题之算法部分】最大和连续子数组
问题描述:给定一个数组A[0,1…n-1],求A的连续子数组,使该数组和最大一. 暴力法 分析:首先初始化要求的最大值maxSum为A[0],然后定义三个索引i、j、k,然后三层循环:第一层i从0遍历到n-1,第二层j从i遍历到n-1,第三层k从i遍历到j,求出A[i]到A[j]之间的元素的和,然后和maxSum作比较并更新maxSum。复杂度:时间复杂度为O(n^3),空间复杂度O(原创 2015-08-16 08:29:57 · 8064 阅读 · 0 评论 -
【面试题之算法部分】二叉树的遍历
前序遍历中序遍历 后序遍历原创 2015-08-24 15:45:30 · 2788 阅读 · 0 评论 -
【面试题之算法部分】最长回文子串
暴力法:枚举中心位置 int LongestPalindrome(const char *s, int n){ if(s == NULL || n < 1) return -1; int i, j, k, max = 0; for(int i = 0; i < n; i++) { //回文子串为奇数的情况 for(int j = 0;原创 2015-08-20 23:26:34 · 827 阅读 · 0 评论 -
【面试题之概率部分】蓄水池抽样
相关面试题:1.n个数中随机取m个 n值非常大2.连续的网络流中等概率的抽取一个数据包3.长度为N的链表中(不知道N具体值)一次遍历随机取K个元素解法:让我们先来考察第一个问题:n个数中随机选取m个数(此时n值有可能不大)方法1——等概率抽取法我们最先想到也是最容易想到的是等概率抽取法,每次都随机在(0,n-1)之间抽取一个数,并与之前的数相比较,若相同,则原创 2015-07-21 21:34:59 · 1998 阅读 · 0 评论 -
【面试题之算法部分】LIS最长递增子序列
动态规划法:假设数组A中元素为{a0, a1, a2,……, ai, ……., aj,….., an} 设L(j)为以aj结尾的子数组序列的最长递增子序列的长度。 要用动态规划来求解,则必须找到递推关系式,即要找到当前状态L(j)与过去状态L(j-1)、L(j-2)、…..L(0)之间的关系。假设我们已经求出了L(j-1)、L(j-2)、…..L(0),那么如何得到L(j)呢,我们这样来做,要保原创 2015-08-20 23:50:33 · 666 阅读 · 0 评论