
算法
lanximu
这个作者很懒,什么都没留下…
展开
-
hash 算法总结
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。转载 2013-10-17 15:02:11 · 919 阅读 · 0 评论 -
利用Arrays.sort(Array,Comparator)对数组进行排序
描述:输入整型数组和排序标识,对其元素按照升序或降序进行排序。0为升序,1为降序。分析:对数组的排序,按照前面某篇文章里讲过的两种方法足以,但可以利用Arrays.sort(Array,Comparator)进行排序。大大简化了代码。代码如下:普通排序方法:public static void sortArray(Integer[] pIntegerArray,原创 2014-03-03 15:27:44 · 7295 阅读 · 1 评论 -
利用Double.parseDouble判断字符串是否是有效数字
描述:判断字符串是否是有效数字,是返回0,不是返回-1;如123.456是有效数字,返回0;123a不是有效数字,返回-1。 分析:可以利用Double.parseDouble(string s)进行判断,当s为null或不能转换为Double时均会抛出异常。 代码如下:public int NumType(String s){Double a;try{原创 2014-03-03 16:08:14 · 9116 阅读 · 0 评论 -
整数去重排序
描述:实现整数去重排序,即先将从A输入的整型数序列进行排序,剔除重复整型数,输出得到升序序列B;分析:常规做法是先去重,再排序,或先排序,再去重,略复杂。但TreeSet为我们提供了遍历,因为它本身就带去重排序功能,若不加比较参数,则默认为升序。代码如下:public static int[] sort(int[] array_A){if (array_原创 2014-03-03 13:23:37 · 2591 阅读 · 0 评论 -
Redraiment的遭遇
描述:Redraiment的老家住在工业区,日耗电量非常大。是政府的眼中钉肉中刺,但又没办法,这里头住的可都是纳税大户呀。 今年7月,又传来了不幸的消息,政府要在7、8月对该区进行拉闸限电。但迫于压力,限电制度规则不会太抠门,政府决定从7月1日停电,然后隔一天到7月3日再停电,再隔两天到7月6日停电,一次下去,每次都比上一次晚一天。 Redraiment可是软件专业的学生,怎么离得开计原创 2014-03-06 21:54:43 · 2664 阅读 · 0 评论 -
最大公约数和最小公倍数
描述:给定两个数,求其最大公约数和最小公倍数分析:数学公式,证明略。代码如下://最大公约数int gcd(int a, int b){return b?gcd(b,a%b):a;}//最小公倍数int lcm(int x, int y){return x/gcd(x,y)*y;}原创 2014-03-06 20:49:36 · 1044 阅读 · 0 评论 -
正则表达式判断合法IP
描述:现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32位数字)。输出判断结果,输入的inputStr是合法的IP,返回YES,否则返回NO。注意:010.1.1.1 是合法的IP原创 2014-03-06 17:54:49 · 3081 阅读 · 0 评论 -
从第一个字符串中删除第二个字符串中出现的所有字符
描述:输入两个字符串,从第一个字符串中删除第二个字符串中出现的所有字符。例如:输入"abcdea" 与 "ac",则应该输出"bde"。分析:以下是一种简单高效的方法:我们可以设置两个指针pfast和pslow,初始化时两个都指向字符串中的第一个字符,pfast碰到一个需要删除的字符直接跳过;pfast如果碰到不需要删除的字符,就把该字符复制给pslow,同时pfast后移(继原创 2014-03-07 15:05:21 · 2270 阅读 · 0 评论 -
整数分隔
描述:一个整数可以拆分为2的幂的和,例如:7 = 1+ 2 + 47 = 1 + 2 + 2 + 27 = 1 + 1 + 1 + 47 = 1 + 1 + 1 + 2 + 27 = 1 + 1 + 1 + 1 + 1 + 27 = 1 + 1 + 1 + 1 + 1 + 1 + 1总共有六种不同的拆分方式再比如: 4可以拆分成: 4 = 4, 4 = 1+1+原创 2014-03-09 22:12:59 · 1385 阅读 · 0 评论 -
数字基root
描述:求整数的Root:给定正整数,求每位数字之和,如果和不是一位数,则重复;输入任意一个活多个整数,输出各位数字之和,如果输入不为正整数,输出-1。分析:当数的和不为一位数时,继续求和的各位数之和。代码如下:#include int Sumdigit(int n){int temp = 0;while (n){temp = temp +原创 2014-03-09 15:33:58 · 1784 阅读 · 0 评论 -
各种排序算法比较
转载自:http://romyli.iteye.com/blog/761655一、冒泡排序 已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较 a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则 不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a转载 2014-05-10 15:13:48 · 1105 阅读 · 0 评论 -
高次方的尾数
描述:求解M的N次方的最后三位数分析:最直接的想法是将M的N次方计算出来后截取最后三位;但是由于计算机所表示的整数范围有限,这样做可能得不到正确的结果。题目仅要求求最后三位的值,完全没有必要全部计算。研究乘法规律发现:乘积的最后三位值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。利用这一规律,可进行简化。代码如下:unsigned int GetL原创 2014-03-02 16:29:34 · 2146 阅读 · 0 评论 -
对数组进行排序的两种方法
描述:对重量进行排序后,输出帽子颜色,如有5只小白鼠,重量分别为15, 30, 5, 9 30, 帽子颜色依次为CL_RED, CL_BLUE, CL_BLUE, CL_YELLOW, CL_GRAY,则排序后的输出的帽子颜色序列应该为CL_BLUE, CL_YELLOW, CL_RED, CL_BLUE, CL_GAR. 如果没有小白鼠,则输出null分析:对数组进行排序原创 2014-03-02 15:59:21 · 6094 阅读 · 0 评论 -
n皇后问题总结
N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。一、 求解N皇后问题是算法中回溯法应用的一个经典案例 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。 在现实中,有很多问题往往需要我们把其所有转载 2014-01-14 23:06:19 · 4362 阅读 · 0 评论 -
求二进制中1的个数 各种算法 各种。。
算法-求二进制数中1的个数问题描述任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4这也是一道比较经典的题目了,相信不少人面试的时候可能遇到过这道题吧,下面介绍了几种方法来实现这道题,相信很多人可能见过下面的算法,但我相信很少有人见到本文中所有的算法。如果您上头上有更好的算法,或者本文没有提到转载 2014-01-17 06:53:02 · 832 阅读 · 0 评论 -
求子数组最大和各种方法 各种。。
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。 如果不考虑时间复杂度,我们可以枚举出所有子数组并转载 2014-01-17 08:00:09 · 783 阅读 · 0 评论 -
找出升序数组中和为给定值的两个数字
描述:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输入任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4和11。分析:(1)如果我们不考虑时间复杂度,最简单想法莫过于先在数组中固定一个数字,再依次判断数组中剩下的n-1个数字与它的和是不是等于输入的原创 2014-02-28 10:10:55 · 1908 阅读 · 0 评论 -
整型反序
描述:给出一个不多于5位的整数,进行反序处理,要求:1、求出它是几位数;2、分别输出每一位数字;3、按逆序输出各位数字,例如原数321,应输出123(仅数字之间以空格间隔,负号与数字之间不需要间隔)例如:输入:12345 输出 5 ; 1 2 3 4 5 ; 54321注意:如果是负数,负号加在第一个数字之前,与数字没有空格间隔,比如:输入:-12345 输出:5;-1 2 3 4原创 2014-02-28 17:40:16 · 2250 阅读 · 0 评论 -
字符串替换
描述:写出一个程序,接受三个参数,分别是一个字符和两个字符,然后输出替换字符后的字符串。区分大小写。例如:输入:ABCDEF,A,B 输出:BBCDEF分析:遍历,判断,注意如果压根没有替换,也返回-1,所以需要加一个标志用的参数flag判断是会否进行了替换。代码如下:int ProcessString(char * strInput, char chSrc, cha原创 2014-03-01 21:08:29 · 1647 阅读 · 0 评论 -
字符串加解密
描述:1、 对输入的字符串进行加解密,并输出。2、 加密方法为:当内容是英文字母时,则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。3、 解密方法为加密的逆过程。分析:遍历输入字符串,对字符分类讨论,重点是字母的大小写转换,大写转小写加上32,反之减原创 2014-03-01 20:24:10 · 1533 阅读 · 0 评论 -
在字符串中找出连续最长的数字串
描述:请在一个字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!样例输入abcd12345ed125ss123058789abcd12345ss54761样原创 2014-03-01 12:17:04 · 3580 阅读 · 0 评论 -
字符串反转
描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符。例如:输入:abc输出:cba分析:求出字符串的长度,用两个数组进行处理即可。代码如下:int ProcessString (char * strInput, char * strOutput){if (strInput == NULL){return -1;}int le原创 2014-03-01 17:28:00 · 1112 阅读 · 0 评论 -
指定字符删除
描述:输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。分析:遍历字符串,若遇到和字符c相同的字符,则不加入新的字符串中代码如下: 数组实现:int removechars(char *in, char c, char *out){if (in == NULL){return 0;}int k = 0;for (int i原创 2014-03-01 16:52:24 · 964 阅读 · 0 评论 -
ACM进阶之路(转)
(顺便推荐北大的ACM网站,里面有很多题,可以试着做做提交看对不对:http://acm.pku.edu.cn)-------------2007年12月30日 星期日 18:20一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功。ACM主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。下面给个计划你练练:第一阶段:练经典常转载 2014-06-29 22:42:31 · 774 阅读 · 0 评论