Algorithm
vikingliu
这个作者很懒,什么都没留下…
展开
-
整数的因子分解
[code="java"]package com.viking.divide;/** * * @author viking * * 求整数的因子分解 比如12可以分解为 * 12=12 * 12=6*2 * 12=4*3 * 12=3*4 * 1...原创 2011-10-17 23:21:14 · 300 阅读 · 0 评论 -
树中任意两个节点之间的距离
树中任意两个节点之间的距离是指,从一个节点到另一个几点之间的一条路径。如果路径上边的权值为1,其它权值为0,那么其实就是计算树的权值。那么怎样该点是不是在这条路径中呢?其实并不难,只要我们知道左子树和右子树的权值就可以判断了。如果左子树和右子树的权值都为0,那么该节点肯定不在要查找的路径上。否则该节点肯定在查找的路径上。如果左右子树权值都不为0,那么当前节点为公共父节点,查...原创 2011-11-04 00:28:45 · 2743 阅读 · 0 评论 -
用5,7,12加减运算,求最少步数得到任意数n
[code="java"]package www.viking.com.algorithm;public class MinSteps { /** * @param args * 5,7,12加减运算表示任意n的最少个数 * * 也就是 5x+7y+12z=n * * 求|...原创 2011-11-03 23:59:16 · 177 阅读 · 0 评论 -
线段重合问题
问题:y=ax+b;有很多线段{x0,y0,x1,y1}{x2,y2,x3,y3}{x4,y4,x5,y5}....{xn-1,yn-1,xn1,yn}(xi,yi)在直线上,判断这些线段是否存在重合思路:首先,知道x可以根据y=ax+b算出y,又因为是直线,所以x与y是一一对应的如果{xi,yi,xi+1,yi+1}与{xj,yj,xj+1,yj+1}有重合区域,...原创 2011-11-01 13:21:51 · 1259 阅读 · 0 评论 -
区间覆盖问题
问题:有很多区间,比如[1.1,3.4] [1,3] [-1,3] [2.5,6].....求区间重合次数最多的 比如上面[2.5,3]被重合了4次思路:用a[n][2]存储所有的区间,a[n][0]存储区间的开始值,a[n][1]存储区间的结束值,并且a[n][0]...原创 2011-11-01 13:00:38 · 256 阅读 · 0 评论 -
数组循环移位
比如1 2 3 4 5 循环移位1位 5 1 2 3 4 循环移位2位 4 5 1 2 3 循环移位3位 3 4 5 1 2 循环移位4位 2 3 4 5 1 循环移位5位 1 2 3 4 5 可以看出,当移动n位时还原了,数据没有变化。 所以当移...原创 2011-10-31 22:09:54 · 203 阅读 · 0 评论 -
最大子矩阵的和
[code="java"]package www.viking.com.algorithm;public class MaxSubMatrixSum { /** * @param args * * 求子矩阵的最大和 * | a11 …… a1i ……a1j ……a1n | * | a21 …… a2i ……a2j ……a2n |...2011-10-25 15:30:07 · 84 阅读 · 0 评论 -
最大字段和
[code="java"]package www.viking.com.algorithm;public class MaxSubSquenceSum { /** * @param args * * 最大字段和 * * b为字段累加和 * * b=b>0?b+a[i]:a[i] * * 并且记录最大的b...原创 2011-10-25 14:43:13 · 164 阅读 · 0 评论 -
有重复数的全排列
有重复数的全排列和全排列的算法是一样的只不过要去掉重复的序列122的全排列122212221一共三种三个数的全排列是6种,其中有3种重复了。其实关键问题就是怎么从全排列中去掉重复的理解全排序的过程,从begin到i-1的数据都与begin交换过,如果第i的数据与前面begin到i-1中的数据有重复,那么不用交换了设 a[i]=x 存在 a[j]=x ...原创 2011-10-21 18:34:16 · 1544 阅读 · 0 评论 -
有重复数的组合
[code="java"]package com.viking.divide;public class DuplicateCombination { public static void main(String[] args) { int[] a = { 1, 2, 3 ,3}; System.out.println(perm(a, 0)); } pub...原创 2011-10-21 18:33:05 · 222 阅读 · 0 评论 -
无重复数组合
无重复数的组合问题就是集合的所有非空子集比如 {1,2,3}的组合结果是 {1},{2},{3}{1,2}{1,3}{2,3}{1,2,3}组合跟关键字的排列顺序无关利用全排列算法求解全排列算法可以求出集合所有的子集排列所以 组合就是全排列的一个子集1231213212331321231322132...原创 2011-10-21 18:30:47 · 195 阅读 · 0 评论 -
m n 全排列
n个字符中长度为m的全排列[code="java"]public class MNPerm { public static void main(String[] args) { int[] a = { 1, 2, 3 ,4}; int m=2; System.out.println(perm(a, 0,m)); } public static int ...原创 2011-10-21 08:54:48 · 288 阅读 · 0 评论 -
子集的全排列
比如 123123122113312332123132213231312321[code="java"]public class SubPerm { public static void main(String[] args) { int[] a = { 1, 2, 3, 4 }; System.out.pri...原创 2011-10-21 08:51:56 · 162 阅读 · 0 评论 -
google笔试题 人民币问题
方法一:递归方法对 charge[]={1,5,10,20,50,100}标号 用i表示 0,1,2,3,4f(n,i)表示n由后面第i到4种零钱的组合结果f(n,0)=f(n-charge[0],0)+f(n-charge[1],1)+f(n-charge[2],2)+f(n-charge[3],3)+f(n-charge[4],4)f(n,i)=f(n-charge[i],...原创 2011-10-20 23:57:24 · 118 阅读 · 0 评论 -
查找无向图中的环
[code="java"]static int[][] M = { { 0, 1, 0, 0, 0, 0 }, { 1, 0, 1, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 1, 0, 1, 1 }, { 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 1, 0, 0 } };...原创 2011-10-19 23:51:32 · 662 阅读 · 0 评论 -
无重复数的全排列问题
采用分治思想,很多书都有。。。 8) 这里只是引用一下,因为有很几个算法需要基于全排列算法所以写在这里还是有点必要的递推公式Perm(R)=r1Perm(R1)+r2Perm(R2)+...+rnPerm(Rn);不懂的话看书~~[code="java"]package www.viking.com.algorithm;/** * * @autho...原创 2011-10-18 09:51:05 · 182 阅读 · 0 评论 -
爬台阶问题
[code="java"]package com.viking.dynamic;/** * * @author viking * * 有n步台阶,一次只能上1步或者2步,求一共有多少中走法 * * f(n)=f(n-1)+f(n-2) * * f(1)=1 f(2)=2 */...原创 2011-10-18 07:57:50 · 148 阅读 · 0 评论 -
查找中间数
[code="java"]package com.viking.divide;/** * * @author viking * * 查找中间数 有两个长度相等,按升序排列的数组,现要查找中间数 因为有两个中间数,返回偏小的那一个 * * 中间数是数组中大小处于中间的那个数 * * 基本思路,用而分查...原创 2011-10-18 00:21:47 · 956 阅读 · 0 评论 -
查找任意两个节点的公共父节点
基本思路是对需要查找的节点赋权值为1,其它节点权值为0.那么只要找到一个节点的左右权值都不为1的点就是需要查找的公共父节点。[code="java"]static class Node { String value; Node left; Node right; } static Node parent; public static int findP...原创 2011-11-04 00:42:00 · 709 阅读 · 0 评论