并查集:互不相交的集合并查集的3种操作:(1)Make_Set()把每一个元素初始化为一个集合,初始化后的每一个元素的父节点是它本身(2)Find_Set(int x)查找一个元素所在的集合,关键在于寻找这个元素所在集合的祖先(3)Union(int x, int y)合并x和y所在的集合,一个集合的祖先指向另一个集合的祖先题目:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那
//拓扑排序 class TopologicalSort{ int[][] graph; int[] list; void input(int[][] graph){ this.graph=graph; list=new int[graph.length]; calculate(); } void calcul
给定两个字符序列X{x1,x2,x3,...,xm}和Y{y1,y2,...,yn}设最长公共子序列为Z{z1,z2...zk},那么,以下结论成立: C(i, j)的递推方程如下: C(x, y) = 0 ,i=0,j=0 = C(i-1 ,j-1)+1i,j>0 , xi = yj = max{ C(i-1 , j) , C(i , j-1)}i,j>0 , xi!= yj网上的一
先记下来网上参考的思路,有空再去实现,不过有了思路应该要编代码也不难。举例:中缀表达式:(1+2)*5-6后缀表达式:1 2 + 5 * 6 -步骤:1.初始化:运算符栈S1和中间结果栈S2 2.从左往右开始扫描中缀表达式 3.遇到操作数,压入S2 4.遇到运算符,比较它和S1栈顶运算符的优先级 4-1.如果S1为空,或者栈顶运算符为"(",或者它的优先级比栈顶运算符高,直接压人S1
JVM的相关知识还是挺多的~~~读书后特地都记下来~~~要不很容易就忘掉额。。。一个JVM实例包括一个方法区,栈内存,堆内存,本地方法区,PC寄存器。执行引擎(作用:解析jvm字节码指令),每一个执行引擎实例是一个java线程。一个jvm实例中会同时有多个执行引擎在工作,这些引擎有的在执行用户程序,有的在执行jvm内部的程序(如gc)每创建一个执行引擎实例会给这个实例创建一个java栈和pc寄存器
今天华为去机试,有3题,前两题比较简单所以就不记下来了,第三题其实也是可以的,不过可能是太久没有刷题,没有反应过来,思考了半天应该用那种数据结构去存它之类的。还有一些诸如nullpointererror这样的错误还一直出现,最后时间不够只完成了一半,估计悲剧了~~~不过不要紧,最主要是要总结一下,所以回来把它给完成了。。。编码编得还真不快,而且总觉得我写算法相关的代码不太爱调用函数,这种习惯不太好
package com.java.study; class MazeClass{ private int []H = {0 ,1 ,0, -1}; private int []V = {-1 ,0 ,1, 0};//上,右,下,左 private char[][]Maze; private int len; public MazeClass(char[][]
package com.java.study; import java.util.Scanner; public class MaxStr { public static void dp(char[]ch1, char[]ch2){ int len1 = ch1.length; int len2 = ch2.length; int max =
public class Node { private int value; private Node left; private Node right; //存储二叉树 public void store(int value){ if(value < this.value){//在该结点的左边 if(left==null){//该结点的左结点为空
package com.zhang.graph; import java.util.Vector; //有向加权图Dijkstra算法 public class NetWork { Vertex start; private class Vertex{ Object object; Edge edges; Vertex nextVer
之前看书学的,觉得写得挺容易懂的~~package com.zhang.pro2; import java.util.Vector; public class NetWork { Vertex start; private class Vertex{ Object object; Edge edges; Vertex nextVert
package com.blog.other; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; class DateSimTime{ private SimpleDateFormat sim = null;
括号匹配问题:判断括号状态是否合法,'('一定有一个')'和它对应起来,'('入栈,通过出栈出来的值是否与')'匹配确定是否合法。如果stack到最后不为空,则一定有至少一个'('没法匹配成功。题目为判断'[]'、'{}'、'()'的合法状态public static boolean braket(String str){ Stack<Character> s = new St
//最长上升子序列 public class LIS { public static int lisFun(int[]arr){ int len = arr.length; int[]lis = new int[len]; for(int i = 0 ; i < len; i++){ lis[i] = 1;//初
//构造字典树 boolean insert(Strin str){ Node p = head; for(int i = 0 ; i<str.length();i++){ p.count++;//当前节点被访问+1 if(p.end)return false;//存在前缀 if(p.child[str.charAt(i)-'
今天要尽量把前段时间写的算法都总结一遍。。不过分析写太慢了。。所以大部分找天再补上(≡(▔﹏▔)≡以后我还记得是怎么一回事么。。。),以后再补上算法分析的时候顺便可以再重新把算法看一遍~~~0-1背包问题,因为都能搜到题目是啥米意思,所以就大概说一下输入输出输入如下:第一行为背包总数n,背包最大容量C,第二行为对应各背包的载重量,第三行为对应各背包的价值量。3 64 3 25.0 4.0 1.0输
package com.java.struture; public class Mouse { private int startx, starty; private int endx,endy; private boolean success;//找到路径 public void setStart(int startx,int starty){
虽然是跟着学的,但实在米有改动。。。因为这两个算法的确就这样写的啦~~~所以直接把代码跟着敲一敲运行一遍放上来~~~package com.java.struture; import java.util.Scanner; public class MinPath { private static int INF = 999999; private int[][]map; p
package com.java.struture; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Graph { private int [][]G;//图 private int vnums;//顶点数 private boolean[]
\(▔^▔)/由于种种原因,很久没有写blog了,总觉得写blog的时间好长额。。。。加上整个假期过来自己都郁闷了一点≡(▔﹏▔)≡。。。。自己趁着假期又新增了兴趣,学了一堆。。。总觉得自己啥米都学了点可是啥米都学不精通,所以还是回归自己最熟悉的语言Java好好学学先,至于其他兴趣再好好学学吧。快速排序的算法复杂度最快和平均的时候都是O(nlog(n)),而且是很多复杂度为O(nlog(n))的排
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号