算法
进哥说Java面试
这个作者很懒,什么都没留下…
展开
-
以O(logn)的时间复杂度计算两个数组的中位数
//数组a[N]和b[N]已排好序,计算a[N]和b[N]这2N个数的中位数#include using namespace std;//计算每个数组的中位数float Median(float a[],int n){if(n%2==0)return (a[n/2]+a[n/2-1])/2.0f;elsereturn a[n/2];}/*求共同中原创 2013-05-04 00:49:17 · 1381 阅读 · 0 评论 -
不同钱币组合方案问题
不同钱币组合方案问题 Given an infinite number of quarters(25 cents),dimes(10 cents),nickle(5 cents) and pennies(1 cent), write code to calculate the number of ways of representing n cents.基本思想转载 2015-09-19 18:08:53 · 1534 阅读 · 0 评论 -
归并排序的非递归实现
书上归并排序大多都是采用分治的思想,结合递归方式实现,现采用非递归的方式实现,源码如下:#include #include using namespace std;void Merge(int *left, int *right, int *right_end){ int *left_end = right; int *result = left; int temp_size原创 2015-01-17 20:59:13 · 688 阅读 · 0 评论 -
归并排序法求数组中的倒置数量
如果一对元素(A[i], A[j])是倒序的,即i A[j],则他们被称为一个倒置。设计o(nlogn)的算法来计算数组中的倒置数量。利用归并排序实现源码如下:#include #include using namespace std;void Merge(int *left, int leftSize, int *right, int rightSize, int *resul原创 2015-01-17 22:05:00 · 5031 阅读 · 1 评论 -
字典树(Trie tree)
Trie,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含原创 2015-01-12 20:24:13 · 658 阅读 · 0 评论 -
跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2015-01-12 16:26:45 · 681 阅读 · 0 评论 -
利用&&运算特性求和
#include #include #include int add_fun(int n, int & sum) { n && add_fun(n-1, sum); return (sum += n); } int main() { int sum = 0; in原创 2014-07-04 21:17:01 · 741 阅读 · 0 评论 -
以时间复杂度O(n)计算最大子序列和
int MaxPartialSum(const int a[],int N){ int i,thisSum,MaxSum; thisSum=MaxSum=0; for(i=0;i<N;i++) { thisSum+=a[i]; if(thisSum>MaxSum) MaxSum=thisSum; if(thisSum<0) thisSum=0;原创 2013-04-30 20:31:50 · 902 阅读 · 0 评论 -
递归计算x的N次方
int Power(int x,int N){ if(N==1) return x; if(N%2==0) return Power(x*x,N/2); else return Power(x*x,N/2)*x;}原创 2013-04-30 20:27:53 · 5864 阅读 · 0 评论 -
最长回文子串
回文串指给定的字符串,正着读和反着读都是一样的。如ADA,反过来还是ADA即为回文串。最长回文子串指查找一给定字符串中最长的回文串。通常有以下4种解法。主要考虑的是时间复杂度。1:穷举法穷举所有的子串,找出是回文串的子串,统计出最长的一个。求每一个子串时间复杂度O(N^2),判断子串是不是回文O(N),两者是相乘关系,所以时间复杂度为O(N^3)。代码如下:转载 2016-03-21 09:38:17 · 345 阅读 · 0 评论