简单算法
文章平均质量分 71
easyjsf
do it....
展开
-
全排列
<br />public class Permutation { public static void perm(int[] num, int i) { if(i < num.length - 1) { for(int j = i; j <= num.length - 1; j++) { int tmp = num[j]; // 右->左原创 2011-05-09 16:22:00 · 276 阅读 · 0 评论 -
kmp算法解析
<br />原文地址:http://www.cnblogs.com/CampFeather/articles/536313.html<br /><br />KMP字符串模式匹配详解<br /><br />个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]转载 2011-04-30 10:20:00 · 319 阅读 · 0 评论 -
Kmp算法
public class KMPAlgorithm { /** * 计算模式串的next函数 * * @param desStr * 模式串 * @return 模式串的next函数,用数组来保存 */ private static int[] kmpNext(String desStr) { int len = desStr.length();原创 2011-04-30 21:18:00 · 361 阅读 · 0 评论 -
21次方
<br />原文地址:http://huajiang.iteye.com/blog/763764<br />一道算法题<br />文章分类:Java编程<br />经楼下朋友提醒,我这个算法求出的正好是21位水仙花数。于是我对其进行了稍微的修订,使得其支持任意位数的水仙花数求值,效果还不错,理论上的水仙花最大数为34位(我算了下,至少到39位还有解),我的求解花了半分多钟,而21位数的求解只化了2秒多。<br /> <br />[原题]<br /> http://www.iteye.com/p转载 2011-05-01 22:51:00 · 2496 阅读 · 0 评论 -
整数划分
public class Test9 {public static void main(String[] args){ divideNumber(6);} public static void divideNumber(int n){ int[] arr = new int[n]; divideNumber(arr, 0, 6, 6);}//往数组中填充数字, index为待添位, maxNum 为能填入的最大值, remnan转载 2011-05-02 14:04:00 · 674 阅读 · 1 评论 -
N个鸡蛋M个篮子
N个鸡蛋分到M个篮子里(N>M),不能有空篮子,对于任意不大于于N的数,保证有几个篮子的鸡蛋数和等于此数,编程实现输入N,M两个数,输出所有鸡蛋的方法全输出的话本质就是搜索+剪枝。(n,m,min)表示当前状态,按照篮子里蛋的数目从小到大搜索。搜到了第m个篮子,1..m个篮子面共放了n个蛋,当前的篮子放了min个蛋。下一个扩展(n+t,m+1,t),for t=min...n+1。当转载 2011-06-24 22:23:00 · 854 阅读 · 0 评论 -
利用数组计算256的阶乘
<br />假如我们要精确计算一个很大的数,比如说,256的阶乘(结果有500多位),怎么办?<br /><br /> 你会说,很好办啊,从JDK 1.1起Java不是提供了一个java.math.BigInteger吗?不错,用BigInteger确实能解决问题。不过,如果没有Sun给的这个class,仅仅靠Java最基本的那些类型,我们有没有办法来进行计算呢?答案是,肯定是能嘛,要不然在BigInteger之前怎么办。<br /><br />方法之一就是用数组来表示。比如说:<br />转载 2011-05-05 13:16:00 · 1300 阅读 · 0 评论 -
自守数,亲密数,完美数
<br />自守数:<br /> <br />public class AutomorphicNum{ public static void main(String[] args) { for(int i=1;i<=999;i++) judge(i); } public static void judge(long n) { int bit = getBit(n); long mod = (long) Math.pow(10, bit原创 2011-05-05 16:44:00 · 471 阅读 · 0 评论 -
大数值,递归乘法表
用数组标示 大数public class BigNumber { static int[] data = new int[100]; /** Creates a new instance of BigNumers */ public static void main(String[] args) { int num = 0; data[0] = 1; for (int i =原创 2011-05-05 16:47:00 · 483 阅读 · 0 评论 -
字典序集合,吸血鬼数
<br />字典序 集合<br />public class PossibleSet { public static void main(String[] args) { int[] set = new int[5]; char[] chs = {'a','b','c','d','e'}; int position = 0; set[position] = 1;原创 2011-05-05 16:54:00 · 421 阅读 · 0 评论 -
简单递归
<br />N个元素的平均值:<br /> <br />float avg(int a[],int i)<br />{<br /> <br />if(i==0)return a[0];<br />else<br />return (avg(a[],i-1)*i+a[i])/(i+1));<br />}<br /> <br /> <br />求最大元素:<br /> <br />elemType max(sqlist a,int i,int j)<br />{<br /> <br />elemType ma原创 2011-05-05 21:36:00 · 351 阅读 · 0 评论 -
21位水仙花
<br />import java.math.BigInteger;import java.util.Arrays;public class Narcissistic { private static BigInteger[] table = new BigInteger[10]; public static void main(String[] args) { long time = System.nanoTime();转载 2011-05-06 18:24:00 · 360 阅读 · 0 评论 -
辗转相除法 最大公约数
<br />辗转相除法 <br />「辗转相除法」又叫做「欧几里得算法」,是公元前 300 年左右的希腊数学家欧几里得在他的著作《几何原本》提出的.利用这个方法,可以较快地求出两个自然数的最大公因数,即 HCF 或叫做 gcd.<br />最大公约数(greatest common divisor,简写为gcd;或highest common factor,简写为hcf)<br />所谓最大公因数,是指几个数的共有的因数之中最大的一个,例如 8 和 12 的最大公因数是 4,记作 gcd(8,12)=4.原创 2011-05-06 20:05:00 · 597 阅读 · 0 评论 -
杨辉三角
<br />public class YHsanjiao{ public static void main(String args[]){ int n = 10; System.out.println("N="+n); for(int i=0;i<=n;i++){ for(int j=0;j< 12-i;j++) System.out.printf(" "); for(int j=1;j< i+2;j++原创 2011-05-06 21:28:00 · 330 阅读 · 0 评论 -
旋转打印。
public static void main(String[] args) { char[][] chars = { {'1','2','3','4'}, {'5','6','7','8'}, {'9','0','a','b'}, {'c','d','e','f'}}; int columnNum = cha原创 2011-05-09 16:51:00 · 314 阅读 · 0 评论 -
整数划分
<br />原帖地址:http://www.kuqin.com/algorithm/20080511/8342.html<br /><br />整数划分问题是将一个正整数n拆成一组数连加并等于n的形式,且这组数中的最大加数不大于n。<br /> 如6的整数划分为<br /> <br /> 6<br /> 5 + 1<br /> 4 + 2, 4 + 1 + 1<br /> 3 + 3, 3 + 2 + 1, 3 + 1 + 1 + 1<br /> 2 + 2 + 2转载 2011-04-29 22:40:00 · 300 阅读 · 0 评论 -
找倒数第K个数
<br />原文地址:http://blog.csdn.net/nokiaguy/archive/2009/01/17/3818966.aspx<br /> <br /> <br />public class Test{ static class Node { public int data; public Node nextNode; } //////////////////////////////////////////转载 2011-04-29 22:11:00 · 321 阅读 · 0 评论 -
打印所有可能的集合
<br />/*产生无序集合*/public class PossibleSet { public static void main(String[] args) { char[] digit = new char[10]; for(int i = 0; i < digit.length; i++) digit[i] = '0'; System.out.println("{}"); // 空集合转载 2011-04-28 13:12:00 · 427 阅读 · 0 评论 -
"4"不能在第三位,"3"与"5"不能相连。
<br />一著名软件公司的java笔试算法题! <br /> 算法程序题: <br /> 该公司笔试题就1个,要求在10分钟内作完。 <br /> 题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。<br /><br /><br />循环方法class Test2 {public stat原创 2011-05-09 16:24:00 · 672 阅读 · 0 评论 -
砝码称重
public class Poise { public static void main(String[] args) { int[] num={1,1,1,1,1,1}; int[] flag = new int[1001]; int[] poise = {1,2,3,4,10,20}; int total = 0; flag[0] = 1; for(int i=0;i=poise[i];k--)原创 2011-05-08 12:10:00 · 315 阅读 · 0 评论 -
丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3;如果能被5整除,就除以连续5。如果最后我转载 2011-05-10 18:07:00 · 437 阅读 · 0 评论 -
优雅的全排列
<br /><br />public class FullArrange { private char[] element; private int length; public static void main(String[] args) { FullArrange fa = new FullArrange(); fa.arrange(new char[]{'1','2','3','4'}); } public void arrange(ch原创 2011-05-11 15:29:00 · 411 阅读 · 0 评论 -
求二进制中1的个数
<br /> <br /> <br />求二进制数中 1 的个数<br />对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效<br />率尽可能地高。<br /> <br /> <br />分析与解法<br />大多数的读者都会有这样的反应:这个题目也太简单了吧,解法似乎也相当地单一,不<br />会有太多的曲折分析或者峰回路转之处。那么面试者到底能用这个题目考察我们什么呢?事<br />实上,在编写程序的过程中,根据实际应用的不同,对存储空间或效率的要求也不一样。比<br /转载 2011-05-11 15:52:00 · 276 阅读 · 0 评论 -
子数组的最大乘积
<br /> <br /> <br /> <br />子数组的最大乘积<br /> <br />给定一个长度为N的整数数组,只允许用乘法,不能用除法,计算任意(N-1)<br />个数的组合乘积中最大的一组,并写出算法的时间复杂度。<br />我们把所有可能的(N-1)个数的组合找出来,分别计算它们的乘积,并比<br />较大小。由于总共有N个(N-1)个数的组合,总的时间复杂度为 O(N2<br />),但<br />显然这不是最好的解法。<br /> <br />分析与解法<br />【解法一】<br转载 2011-05-12 20:24:00 · 772 阅读 · 0 评论 -
去除字符串里的空格
<br />public static void trim(StringBuffer sb) { int i = 0; int k = 0; boolean flag1 = true;//是否第一个空格 boolean flag2 = true;//是否已标记第一个空格 while(i<sb.length()) { if(sb.charAt(i)==' '&&flag1) { k = i; flag2 = true;原创 2011-05-19 12:02:00 · 375 阅读 · 0 评论 -
重建二叉树
<br />本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Radic_Feng/archive/2010/12/13/6074291.aspx<br /> <br /> package cn.feng;class Node { Node left = null; Node right = null; char value;}public class BinaryTreeBuilder { /** * 根据前序遍历和中序遍历重建二叉树子树转载 2011-05-24 20:16:00 · 376 阅读 · 0 评论 -
所有可能的连续自然数(两个以上)之和的算式
<br />注:leoyonn原创,请注明出处 http://hi.baidu.com/leoyonn<br />问题1. 写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式; <br />问题2. 例如32就找不到这样的表达,这样的数字有什么规律? <br />问题3. 在64位正整数中,子序列数目最多的是哪一个?能否用数学知识推导出来?<br /> --------------------------------------------------------------转载 2011-05-25 21:39:00 · 5228 阅读 · 1 评论 -
中缀表达式与前缀,后缀的转换
<br /><br /> <br />35,15,+,80,70,-,*,20,/ //后缀表达方式<br />(((35+15)*(80-70))/20)=25 //中缀表达方式 <br />/,*,+,35,15,-,80,70,20 //前缀表达方式 <br />人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16<br />等进制不知所措一样~~!<br />人们习惯的运算方式是中缀表达式。而碰到前缀,转载 2011-04-27 18:37:00 · 901 阅读 · 1 评论 -
逆波兰式
逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)*(c+d)转换为ab+cd+*d+。它的优势在于只用两种简单操作,入栈和出栈就可以搞定任何普通表达式的运算。其运算方式如下:如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。将一个普通的中序表达式转换为逆波兰表达式的一般算法是:(1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。(2)读入一个用转载 2011-04-27 23:06:00 · 1233 阅读 · 0 评论 -
利用栈 四则运算
/** * 利用栈,进行四则运算的类 * 用两个栈来实现算符优先,一个栈用来保存需要计算的数据numStack,一个用来保存计算优先符priStack * * 基本算法实现思路为:用当前取得的运算符与priStack栈顶运算符比较优先级:若高于,则因为会先运算,放入栈顶; * 若等于,因为出现在后面,所以会后计算,所以栈顶元素出栈,取出操作数运算; * 若小于,则同理,取出栈顶元素运算,将结果入操作数栈。各个优先级'(' > '*' = '/' > '+' = '-'转载 2011-04-27 21:13:00 · 821 阅读 · 0 评论 -
数组实现的约瑟夫问题(Java)
原文地址:http://blog.csdn.net/CManLH/archive/2007/01/09/1478294.aspx说过要将以前写过的文章转过来,这是以前的第一篇blog。 之前是用C++写的,现在做Java了,索性改成了Java版的。看了看以前C++的实现,哈哈,实现得挺烂的,不贴也罢。Java代码如下:/*************************************************************************************** *描述约瑟夫转载 2011-04-28 11:33:00 · 617 阅读 · 0 评论 -
背包问题knapsack
<br />public class knapsack { public static void main(String[] args){ int MIN = 1; int MAX = 8; Fruit[] fruits={ new Fruit("李子", 4, 4500), new Fruit("苹果", 5, 5700), new Fruit("桔子", 2, 2250),转载 2011-04-27 18:12:00 · 578 阅读 · 1 评论 -
字符串的相似度
<br />public static int calculateDistance(String a,int a1,int a2,String b,int b1,int b2) { if(a1>a2) { if(b1>b2) return 0; else return b2-b1+1; } if(b1>b2) { if(a1>a2) return 0; else return a2-a1+1;原创 2011-05-11 14:49:00 · 323 阅读 · 0 评论