算法
文章平均质量分 65
nanfeng224
成功源于坚持!
展开
-
快速排序的三种实现方法
基本原理:通过一趟排序将待排元素分割成独立的两部分,其中一部分的元素都比另一部分小,则分别对这两部分进行排序,最后达到整体有序。转载 2014-09-06 11:55:40 · 474 阅读 · 0 评论 -
在某年的某一个时刻加1秒
if((tiif(time.mo%02d:%02d",time.year,time.month,time.day,time.shi,time.fen,time.miao);return 0;}原创 2014-10-11 18:51:46 · 317 阅读 · 0 评论 -
判断一个单链表是否有环及环的链接点
给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少?解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰撞转载 2014-10-09 23:31:56 · 409 阅读 · 0 评论 -
剑指offer:面试题30,求最小的K个数
方法一:快速排序法原创 2014-10-08 22:39:59 · 416 阅读 · 0 评论 -
给定一个正整数n,将其分成m段,每段为n1,n2,...,nm,求怎么划分使得n1*n2*...*nm最大
题目:自然数N分解为n个自然数的和,求这n个数的乘积最大值分析:最优问题,可以用动态规划求解1、描述最优解结构 N = a1 + a2 + ... + an; M = a1 * a2 * ... * an;求M的最大值 考虑到N = a + b,而a与b又可以分解为另外几个和为a或b的数的积,因此对于确定的N = a +原创 2014-10-08 21:17:07 · 2423 阅读 · 0 评论 -
用字符串来实现加1操作
#include #includeint Increment(char *number);void printnumber(char *number);void print(int n){ if(n<=0) return; char *number =new char[n+1]; memset(number,'0',n); number[n]='\0'; while(!I原创 2014-09-29 22:41:48 · 4252 阅读 · 0 评论 -
伙伴算法
伙伴算法1.原理 Linux的伙伴算法把所有的空闲页面分为11个块组,每组中块的大小是2的幂次方个页面,例如,第0组中块的大小都为20 (1个页面),第1组中块的大小为都为21(2个页面),第10组中块的大小都为210(1024个页面)。也就是说,每一组中块的大小是相同的,且这同样大小的块形成一个链表。对第10组块的最大请求对应着4M(每个页面的大小为4K)大小的连续RAM。每个原创 2014-10-05 10:33:53 · 541 阅读 · 0 评论 -
剑指offer——题目1385:重建二叉树
#includeusing namespace std;struct BinaryTreeNode{ int value; BinaryTreeNode *left; BinaryTreeNode *right;};BinaryTreeNode * construct(int *preorder,int *inorder,int length);BinaryTreeNode *原创 2014-09-27 23:34:56 · 378 阅读 · 0 评论 -
n!用数组存储运算结果
#includeusing namespace std;int main(){ int a[1000]; a[0]=1; int i,j,k=1,pre=0,tmp,n; cin>>n; for(i=2;i<=n;i++) { for(j=0;j<k;j++) //新进来的数与已经存在的数每一位相乘 { tmp=a[j]*i+pre; a[j]=tmp%原创 2014-09-17 10:20:19 · 420 阅读 · 0 评论 -
两个栈实现队列Push和Pop操作
#include#includeusing namespace std;templateclass CQueue{public: CQueue(void){}; ~CQueue(void){}; void Push(T k); T Pop();private: stackstack1; stackstack2;};templatevoid CQueue::Push原创 2014-09-17 11:13:05 · 1179 阅读 · 0 评论 -
编辑距离及编辑距离算法
编辑距离及编辑距离算法编辑距离概念描述:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Leven转载 2014-09-25 21:38:52 · 477 阅读 · 1 评论 -
布隆过滤器
布隆过滤器 假如有1亿个不重复的正整数(大致范围已知),但是只有1G的内存可用,如何判断该范围内的某个数是否出现在这1亿个数中?最常用的处理办法是利用位图,1*108/1024*1024*8=11.9,也只需要申请12M的内存。但是如果是1亿个邮件地址,如何确定某个邮件地址是否在这1亿个地址中?这个时候可能大家想到的最常用的办法就是利用Hash表了,但是大家可以细想一下,如果利用Hash转载 2014-09-13 20:43:56 · 392 阅读 · 0 评论 -
bitset类
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:#i nclude using std::bitset;3.5转载 2014-09-13 20:58:05 · 239 阅读 · 0 评论 -
排序算法
排序4.1 插入排序4.1.1简单插入排序将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。实现方法:把第n个元素与第n-1个元素进行比较,在这次比较中,如果第n个元素要小,则把第n-1个元素向后移一位。这样直到比第n个元素小时才结束。 void insertsort(int a[],int n){ int i,j; int原创 2014-08-29 11:05:56 · 391 阅读 · 0 评论 -
Bitmap
Bitmap方法介绍什么是Bit-map所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复)。那么我们就可以采用Bit-map的方法来达到排序的目的。要表示转载 2014-09-07 22:05:23 · 491 阅读 · 0 评论 -
simhash算法
simhash算法方法介绍背景如果某一天,面试官问你如何设计一个比较两篇文章相似度的算法?可能你会回答几个比较传统点的思路:一种方案是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。另外一种方案是传统hash,我们考虑为每一个web文档通过ha转载 2014-09-07 21:45:28 · 1572 阅读 · 0 评论 -
删除数组中重复的数
有三种方法:1)利用set的性质原创 2014-10-03 21:48:31 · 588 阅读 · 0 评论