随笔分类 - 数据结构与算法Data Structure and Algorithm
摘要:题目:1、给定一数组,求该数组的最大子数组和;2、给定一矩阵,求该矩阵的最大子矩阵和;思路:1、求数组的最大子数组和很简单,可以通过动态规划来实现,假设数组为arr:假设dp[i]表示从0到i的数组的最大子数组和,那么递推关系式表示为:dp[0]=arr[0];dp[i]=dp[i-1]>0?dp[...
阅读全文
摘要:题目:给定一数组,大小为M,数组中的数字范围为1-N,如果某带宽有限,无法传输该大小的数组,该怎么办?思路:通过位图BitMap来压缩数组,将数组中每个数字在bit位上标志,这样就可以将数组大小压缩很多倍,每个32位int只需要1bit来表示。代码:#include#includeusing nam...
阅读全文
摘要:题目:给定某字符串,判断该字符串中是否包含HelloWorld,出现HelloWorld不一定要连续,但顺序不变,如“HeByello,ByeWorByeld”就包含“HelloWorld”。思路:通过i,j来遍历两个字符串str1,str2(HelloWorld),假设长度分别为m,n;当i>m或...
阅读全文
摘要:题目:The gray code is a binary numeral system where two successive values differ in only one bit.Given a non-negative integernrepresenting the total num...
阅读全文
摘要:题目:有1,2,3,......无穷个格子,你从1号格子出发,每次1/2概率向前跳一格,1/2概率向前跳两格,走到格子编号为4的倍数时结束,结束时期望走的步数为____。思路:1、MonteCarlo模拟实验参考代码2、有限状态机的概率转移思想跳一格跳两格都算一步;dp(i,j)表示从格子i到格子j...
阅读全文
摘要:题目:有一块宝石,1级升2级成功率100%,2级升3级成功率80%,3级升4级成功率60%,4级升5级成功率40%,每次升级失败时降回到1级。请问一块1级宝石升到5级平均要多少次?思路:问题:求一块1级宝石升级到5级的期望次数1、蒙特卡洛模拟试验考虑一下期望的定义,所有的可能的次数*出现该次数的概率...
阅读全文
摘要:题目:求一个字符串的最长回文子串思路:1、暴力枚举最容易想到的就是暴力破解,列举每一个子串,然后根据回文的定义判断是不是回文,找到最长的那个。求每一个子串的时间复杂度为O(N^2),判断子串是不是回文的时间复杂度为O(N),所以时间复杂度为O(N^3)。2、动态规划回文字符串的子串也是回文,比如P[...
阅读全文
摘要:题目:给一个定义:对一个整数,若其中存在相邻两位上的数字相同,则称其为“重复的数”;现给定一个正整数n,求不小于n的最小的非“重复的数”。思路:假设输入的数为n,则令m=n,分别取m的最低两位数字a,b,判断是否a==b,如果是说明是重复的数,那么递归调用n=m+1;考虑特殊情况,ab=99,产生进...
阅读全文
摘要:题目:二叉树中两个结点的最近公共父结点二叉树结点的定义如下:struct TreeNode{ int val; TreeNode *left; TreeNode *right;};思路:前面在剑指Offer中出现了类似的题目,但要求的思路都不太一样,请参考:http://www.cnblogs...
阅读全文
摘要:题目:在一维坐标轴上有n个区间段,求重合区间最长的两个区间段。区间段的数据结构定义如下:struct Interval{ int start; int end;};思路:首先按照区间的左端点即start对n个区间段进行排序;然后从前往后遍历所有区间,比较前后两个区间的右端点即end;假设...
阅读全文
摘要:如题,下面直接贴出代码:#include using namespace std;int Partition(int* A,int left,int right){ int key=A[left]; while(left=key) right--; i...
阅读全文
摘要:题目:Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *...*pm^km.输入描述:Eac...
阅读全文
摘要:题目:把一个整数数组中重复的数字去掉,并输出剩下的不重复的元素。(要求不能开辟新空间)思路:先排序,然后遍历数组比较,详见代码代码:#include #include using namespace std;int cmp(const void* a,const void* b){ retur...
阅读全文
摘要:题目:假设数组a有n个元素,元素的取值范围为1~n,如何判定数组是否存在重复元素?思路:方法1:数组排序,比较相邻元素是否相等;时间复杂度:O(nlogn),空间复杂度:O(1)方法2:使用bitmap(位图),定义长度为N/8的char数组,每个bit表示对应数字是否出现过。遍历数组,使用bitm...
阅读全文
摘要:题目:在排序数组中,找出给定数字出现的次数思路:既然出现排序数组,很容易想到二分查找,时间复杂度为O(logn);先通过二分查找找到最左边出现该数字的下标left(如果没找到,则返回-1),然后通过二分查找找到最右边出现该数字的下表right(如果没找到,则返回-1),然后right-left+1就...
阅读全文
摘要:题目:百度全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的队友信息汇报给主持人,如果A和B是队友,B和C是队友,那么A和C也是队友;接着主持人不断地随机抽取两个人,希望判断二者是否为队友。请设计一个计算机程序辅助主持人判断两个人是否为队友,说明程序的关键算法,不需要代码实现。例如:,,...
阅读全文
摘要:题目:给定以下二叉树:struct node{node *left, *right;int value;};要求编写函数 node* foo(node *node, unsigned int m, unsigned int k);输出以 node 为根的二叉树第 m 层的第 k 个节点值.(leve...
阅读全文
摘要:问题:Given an array of N integer, find the length of the longest increasing subsequence.For example, given [1,-5,4,5,10,-1,-5,7], the longest increasing...
阅读全文
摘要:题目:求二叉树两个结点的最远距离。二叉树定义如下:class TreeNode{public: int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),left(NULL),right(NULL){}}...
阅读全文
摘要:题目:求1到1亿间的质数或素数思路:什么是质数?质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。(来自百度百科)方法1:遍历1到1亿间的所有数,然后逐个判断是否为...
阅读全文

浙公网安备 33010602011771号