算法
文章平均质量分 69
dazhi_100
这个作者很懒,什么都没留下…
展开
-
STL系列之九 探索hash_set
Title: STL系列之九 探索hash_setAuthor: MoreWindowsBlog: http://blog.csdn.net/MoreWindowsE-mail: morewindows@126.comKeyWord: C++ STL set hash_set 哈希表 链地址法本文将着重探索hash_set比se转载 2012-09-13 10:38:55 · 611 阅读 · 0 评论 -
常用算法
一、快速排序void qsort(int x,int y) //待排序的数据存放在a[1]..a[n]数组中 {int h=x,r=y; int m=a[(x+y)>>1]; //取中间的那个位置的值 while(h{while (a[h] while (a[r]>m) r--; //比中间那个位置的值大,循环直到找一个比中间那个值小的 i转载 2012-09-23 20:01:27 · 933 阅读 · 0 评论 -
找出字典中的兄弟单词
问题:给定一个单词A,如果通过交换单词中字母的顺序可以得到另外的单词B,那么定义B是A的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?解析:思路1:1. 关键时怎么定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd。2. 先做一个预处转载 2012-09-22 20:52:19 · 868 阅读 · 0 评论 -
ip地址转化为整数 整数转化为IP地址
1.IP地址转换为一个整数intipstrtoint(const char *ip){int result = 0;int tmp = 0;int shift = 24;const char *pEnd = ip;const char *pStart = ip;while(*pEnd != '\0'){while(*pEnd != '.' &转载 2012-09-20 08:31:49 · 1073 阅读 · 0 评论 -
一些程序题(上机考)
1.找出一个数组中满足2^N的元素#include using namespace std;int find(int a[],int len);void main(){int a[]={1,2,3,5,7,8,16};int len=sizeof(a)/sizeof(int);cout}int find(int a[],int len) {转载 2012-09-20 09:00:02 · 801 阅读 · 0 评论 -
判断完全二叉树以及求二叉树深度的递归与非递归算法实现
/* 判断完全二叉树,依据定义:任何一个节点(除去叶子节点)有且仅有两个“孩子” */#include<stdlib.h>#define MAX_TREE_DEGREE 10typedef struct BTnode{//以二叉链表作为存储结构 char data; struct BTnode* lchild; str转载 2012-09-20 07:51:12 · 3194 阅读 · 2 评论 -
找出数组中出现次数超过一半的数
问题:现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。解析:这个题目类似于:微软的寻找发帖水王,思想:类似于擂台赛,设最多的数为X,每次删除两个不同的数(不管是否为最多的数X),则我们能保证剩下的数中X还是超过剩余总数的一半,一直循环这个过程,则最后一个肯定是X简单代码:int FindMost(const int* A,转载 2012-09-22 21:48:15 · 901 阅读 · 0 评论 -
字符过滤(2013华为校园招聘上机考试)
一个字符串,如aAbas__a;要求,过滤为每个字符只出现一次:aAbs_;#include#include#include#include#includevoid chstr(const char *Input,char *Out){ int m=strlen(Input); const char *p=Input; char *q=Out;转载 2012-09-20 09:04:58 · 679 阅读 · 0 评论 -
最大连续子数列和问题
问题描述:给定一串整数,找出其中和最大的连续子数列,包括子数列的位置和最大和。给定整数序列:{0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5}其中和最大的连续子数列为:{21, 8, -9, 10, -1, 3, 6, 5}【PS】如果序列里都是负数的话,本文的算法返回最大的负数。有一种思想是,如果所有输入数据都是负数,则最大连续子转载 2012-09-17 22:19:08 · 846 阅读 · 0 评论 -
统计一串字符串中出现次数最多和次多的单词
//统计一串字符串中出现次数最多和次多的单词#include#include#includeint compare(const char * st1,const char * st2){ if (strcmp(st1,st2)==0) return 1; else return 0;}void PickWord(const char* p转载 2012-09-20 08:11:50 · 3025 阅读 · 0 评论 -
LRU(Least Recently Used)缓存介绍与实现
引子:我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本,但是,通过电话本查找还是很费时间的。但是,我们大脑能够记住的东西是一定的,我们只能记住自己最熟悉的,而长时间不熟悉的自然就忘记了。其实,计算机也用到了同样的一个概念,我们用缓存来存放以前转载 2015-03-11 16:46:49 · 7208 阅读 · 1 评论 -
【算法】字符串包含
题目描述给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B)比如,如果是下面两个字符串:String 1:ABCDString 2:BA转载 2015-08-16 22:17:26 · 1955 阅读 · 0 评论 -
【算法】旋转字符串
题目描述给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。分析与解法解法一:暴力移位法初看此题,可能最先想到的方法是按照题目所要求的,把需要转载 2015-08-16 22:19:50 · 676 阅读 · 0 评论 -
贪婪算法与计数排序
1.贪婪法:初学算法时便知道这是解决问题一种很好很简单的方法,听课后才发现它能解决的问题还真是多。解决这类问题的方法可概括为“步步为营”,即每一步的选择一定是最优的过后不能更改,这一点是与动态规划最大的区别,动态规划也是类似的自底向上的解决方法,但是其做每一次选择的时候可能会对前面的选择作出动态的调整,由于这种特性使用动态规划时采用递归是很常见甚至是必须的方法。贪婪法典型例题有邮局建设问题转载 2012-09-14 21:14:21 · 1200 阅读 · 0 评论 -
memcpy 和 memmove的重写(有待考察)
void* mymemcpy(void* dest,void* source, size_t count){ char *ret = (char*)dest; char *dest_t = ret; char *source_t = (char*)source; while(coun原创 2012-09-25 12:24:27 · 639 阅读 · 0 评论 -
根据上排的数填写下排的数,并满足要求
问题:根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9解答:ZZ分析:这应该是一道智力题,下面是来自http://blog.csdn.net/wcyoot/article/details/6428305的思路分析,感觉不错,可以参考下:解题思路:关键是理解“要求下排每个数都是转载 2012-09-22 22:03:58 · 673 阅读 · 0 评论 -
STL hash_map使用
今天在使用STL中的hash_map模板遇到使用PTCHAR作为Key时无法对字符串进行正确比较的问题,在网上查找相应的文章可惜没有找到,但找到了http://www.stlchina.org/twiki/bin/view.pl/Main/STLDetailHashMap和http://www.cppblog.com/guojingjia2006/archive/2008/01/12/41037.转载 2012-09-13 10:49:54 · 482 阅读 · 0 评论 -
十一、从头到尾彻底解析Hash表算法
十一、从头到尾彻底解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。-------------------------转载 2012-09-13 10:19:49 · 810 阅读 · 0 评论 -
编程艺术第十六~第二十章:全排列/跳台阶/奇偶调序,及一致性Hash算法
第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题作者:July、2011.10.16。出处:http://blog.csdn.net/v_JULY_v。引言 最近这几天闲职在家,一忙着投简历,二为准备面试而搜集整理各种面试题。故常常关注个人所建的Algorithms1-14群内朋友关于笔试,面试,宣讲会,offer,薪资的讨论以及在群转载 2012-09-13 23:09:23 · 1469 阅读 · 0 评论 -
微软等面试100题答案V0.3版[第21-40题答案]
转自:v_JULY_v第21题2010年中兴面试题编程求解:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.//此题与第14题差不多,在次不做过多解释。//July、本程序,经网友指出有误,但暂时没有想到解决的办法。见谅。2010/10/22。 updated:第20题首次勘误,请转载 2012-09-13 23:24:01 · 2953 阅读 · 0 评论 -
十道海量数据处理面试题与十个方法大总结
------------------------------------------第一部分、十道海量数据处理面试题1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找转载 2012-09-13 22:49:24 · 713 阅读 · 0 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注重用最通俗最直白的语言阐述相关问题。最后转载 2012-09-13 22:52:33 · 883 阅读 · 0 评论 -
C,C++表达式求值顺序
裘宗燕:C/C++ 语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋值、增量转载 2012-09-13 23:07:18 · 797 阅读 · 0 评论 -
微软等面试100题答案V0.2版[第1-20题答案]
1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14/ / / /4 8 12 16 转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树 节点的数据结构如下:struct BSTre转载 2012-09-13 23:20:44 · 1410 阅读 · 0 评论 -
一条直线可以把一个平面分成两部分,两条直线可分成4部分,20条直线最多可分几部分?
1条直线最多将平面分成2个部分;2条直线最多将平面分成4个部分;3条直线最多将平面分成7个部分;现在添上第4条直线.它与前面的3条直线最多有3个交点,这3个交点将第4条直线分成4段,其中每一段将原来所在平面部分一分为二,所以4条直线最多将平面分成7+4=11个部分.完全类似地,5条直线最多将平面分成11+5=16个部分;6条直线最多将平面分成16+6=22个部分;7条直线最多将平面分成转载 2012-09-20 08:04:56 · 26953 阅读 · 0 评论 -
两个线程交替打印ABABAB
一个简单的办法:定义一个全局变量flag 初始化为TRUE;在线程a中判断flag是否为true 为true就打印 然后赋值为false在线程b中判断flag是否为FALSE 为FALSE就打印 b 然后赋值为true转载 2012-09-20 08:17:36 · 2708 阅读 · 0 评论 -
给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
问题:给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数。解答:假设我们要等概率生成一个3位的10进制数(000 - 999),我们可以在 随机生成整数0到9的函数 基础上,随机生成3个数字组成三位数就得到了结果。这里类似,我们首先必须认识到:任何一个数都可以用5进制的数来表示,如12 = 5进制(22) = 2*5 + 2。因此假设我们要随机生成[0,444]范围转载 2012-09-22 22:39:54 · 707 阅读 · 0 评论 -
五分钟理解一致性哈希算法(consistent hashing)
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正转载 2015-08-05 18:41:30 · 530 阅读 · 0 评论