
算法
hxpjava1
毕业于武汉理工大学计算机系,12年开发架构经验,擅长java,k8s
展开
-
算法实践篇-合并排序
package com.sort;/** * * @author Administrator *nlogn */public class MergeSort { private static void merge(int [] source,int left,int right){ if(left==right){ return; } int middle=(原创 2014-03-15 17:21:27 · 583 阅读 · 0 评论 -
计算机科学中最重要的32个算法
奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出转载 2014-03-15 15:35:01 · 701 阅读 · 0 评论 -
算法实践篇-插入排序
package com.sort;/** * 插入排序 * @author Administrator * n*n * */public class InsertSort { private static void sort(int[]source){ for(int i=0;i<source.length;i++){ for(int j=0;j<i;j++){原创 2014-03-15 16:29:42 · 683 阅读 · 0 评论 -
算法实践篇-求最大子数组
package com.sort.divid;/** * 求最大子数组 * @author Administrator *nlogn */public class MaxSubArray { private static int[] findMaxCrossSubArray(int [] data,int left,int middle,int right){ int [] r原创 2014-03-15 19:59:00 · 638 阅读 · 0 评论 -
算法实践篇-冒泡排序
package com.sort;/* * 冒泡排序 * n*n */public class BubbleSort { private static void bubble(int []data){ for(int i=0;i<data.length-1;i++){ for(int j=data.length-1;j>i;j--){ if(data[j]<data[原创 2014-03-15 18:25:00 · 569 阅读 · 0 评论 -
微软100题-天天做-第7题
第7题(链表)微软亚院之编程判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?package com.microsoft;public class ListCross { private No原创 2014-03-26 20:49:59 · 762 阅读 · 0 评论 -
微软100题-天天做-第9题
第9题(树)判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / / 6 10 / / / / 5 7 9 1原创 2014-03-27 14:08:27 · 779 阅读 · 0 评论 -
算法实践篇-用堆构造优先队列
package com.queue;/** * * @author Administrator *优先队列 */public class PriorityQueue { private int[] queue; private int size; public PriorityQueue(int []queue){ this.queue=queue; this.size原创 2014-03-17 23:23:45 · 728 阅读 · 0 评论 -
算法实践篇-2的n次方方正相乘普通方法,递归方法以及strassen方法
package com.sort.divid;/** * 矩阵乘法 * @author Administrator *a,b为n*n矩阵,并且n=2^n */public class StrassenMatrixMultipliy { public static void main(String[] args) { int[][]a=new int[][]{ {1,2原创 2014-03-17 19:11:36 · 1239 阅读 · 0 评论 -
算法实践篇-堆排序
package com.sort;public class HeapSort { private static void buildMaxHeap(int [] data){ for(int i=data.length/2;i>=0;i--){ maxHeapipy(data,i,data.length); } } private static int left(int原创 2014-03-17 22:17:33 · 599 阅读 · 0 评论 -
微软100题-天天做-第10题
第10题(字符串)翻转句子中单词的顺序。题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。package com.microsoft;import java.util.ArrayList;impo原创 2014-03-27 14:37:00 · 651 阅读 · 0 评论 -
算法实践篇-快速排序
package com.sort;/** * 快速排序 * @author Administrator * */public class QuickSort { private static int partition(int []data ,int p,int r){ int x=data[r]; int i=p-1; for(int j=p;j<=r-1;j++){原创 2014-03-18 11:17:51 · 623 阅读 · 0 评论 -
算法实践篇-快速排序-随机化版本
package com.sort;import java.util.Random;public class RandomQuickSort { private static int partition(int []data ,int p,int r){ int random=new Random().nextInt(r-p)+p; int tmpR=data[random];原创 2014-03-18 11:33:03 · 630 阅读 · 0 评论 -
图的广度优先搜索
package com.data.struct;import java.util.Random;public class Graphic { private Node[] list; private NodeArrayQueue queue; public Graphic(int v,int e){ list=new Node[v]; for(int i=0;i<v;i++)原创 2014-04-04 19:51:06 · 570 阅读 · 0 评论 -
求图的最大流-EdmondsKarp方法
package com.data.struct;public class EdmondsKarp { private Node[][]graphic; private Node s; private Node t; private NodeArrayQueue2 queue; public EdmondsKarp(){ graphic=new Node[6][6];原创 2014-04-14 14:25:46 · 1379 阅读 · 0 评论 -
微软100题-天天做-第14题
第14题(数组):题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11这道题貌似有难度。package com.microsoft;public cl原创 2014-03-28 21:29:34 · 869 阅读 · 0 评论 -
微软100题-天天做-第19题
第19题(数组、递归):题目:定义Fibonacci数列如下: / 0 n=0f(n)= 1 n=1 / f(n-1)+f(n-2) n=2输入n,用最快的方法求该数列的第n项。分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。原创 2014-03-29 12:48:24 · 729 阅读 · 0 评论 -
微软100题-天天做-第32题
32.(数组、规划)有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];package com.microsoft;import java.util.ArrayLis原创 2014-03-30 00:08:21 · 776 阅读 · 0 评论 -
数据结构-列表实现
package com.data.struct;public class NodeList { private Node head; public NodeList(){ } public void print(){ Node node=head; while(node!=null){ System.out.print(node.getData()+" ");原创 2014-03-18 19:41:31 · 575 阅读 · 0 评论 -
通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 TreeMap 的关系为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet extends AbstractSet implements转载 2014-03-18 20:28:18 · 741 阅读 · 1 评论 -
数据结构-完全hash,二级哈希java实现
package com.data.struct;import java.util.Random;/** * * @author Administrator *完全散列,两级散列 */public class CompeletHash { private Object [][]slot; private int a;//系数a private int b;//系数b pr原创 2014-03-19 15:09:07 · 1873 阅读 · 0 评论 -
微软100题-天天做-第17题
第17题(字符串):题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。分析:这道题是2006年google的一道笔试题。原创 2014-03-28 23:06:32 · 728 阅读 · 0 评论 -
微软100题-天天做-第25题
第25题(字符串):写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,out原创 2014-03-29 14:47:16 · 882 阅读 · 0 评论 -
微软100题-天天做-第13题
第13题(链表):题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};原创 2014-03-28 21:18:40 · 649 阅读 · 0 评论 -
Hash表分析以及Java实现
这篇博客主要探讨Hash表中的一些原理/概念,及根据这些原理/概念,自己设计一个用来存放/查找数据的Hash表,并且与JDK中的HashMap类进行比较。我们分一下七个步骤来进行。 一。 Hash表概念二 . Hash构造函数的方法,及适用范围三. Hash处理冲突方法,各自特征四. Hash查找过程五. 实现一个使用Ha转载 2014-03-19 13:26:42 · 1032 阅读 · 0 评论 -
数据结构-二叉搜所树java实现
package com.data.struct;/** * 二叉搜索树 * @author Administrator * */public class BinarySearchTree { private Node root; public BinarySearchTree(int[]data){ for(int i=0;i<data.length;i++){ Nod原创 2014-03-19 16:29:22 · 516 阅读 · 0 评论 -
算法实践篇-基于插入排序的桶排序
package com.sort;import java.util.ArrayList;import java.util.List;public class BucketSort { public static void bucketSort(double [] data){ List[] b=new ArrayList[data.length]; for(int i=0;i<原创 2014-03-18 14:35:20 · 630 阅读 · 0 评论 -
计算机科学中的树
[隐藏]查 论 编计算机科学中的树二叉树二叉查找树(BST) 笛卡尔树 MVP树 Top tree T树 自平衡二叉查找树AA树 AVL树 左倾红黑树 红黑树 替罪羊树 伸展树 树堆 节点大小平衡树转载 2014-03-19 16:47:29 · 1200 阅读 · 1 评论 -
算法实践篇-基于计数排序的基数排序
package com.sort;public class RadixSort { public static int[] radixSort(int [] data,int d){ int []source=new int[data.length]; int []target=new int[data.length]; for(int i=0;i<d;i++){ for(原创 2014-03-18 13:42:20 · 988 阅读 · 0 评论 -
图的最大流-通用推送标签方法
package com.data.struct;public class GenericPushRelabel { private Node[][]graphic; private Node s; private Node t; public GenericPushRelabel(){ graphic=new Node[6][6]; Node node0=new Node()原创 2014-04-14 18:35:12 · 748 阅读 · 0 评论 -
猜猜看这个等于几
package com.data.struct;public class Test { public static void main(String[] args) { int a =0; for(int i=0;i<10;i++){ a=a++; } System.out.println(a); }}原创 2014-04-29 17:21:10 · 871 阅读 · 0 评论 -
for那种方式效率最高
package com.data.struct;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test2 { public static void main(String[] args) { List list = new Array原创 2014-04-29 17:38:54 · 873 阅读 · 1 评论 -
微软100题-天天做-第27题
27.跳台阶问题(递归)题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题原创 2014-03-29 15:11:03 · 714 阅读 · 0 评论 -
微软100题-天天做-第11题
第11题(树)求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。原创 2014-03-27 14:47:00 · 758 阅读 · 0 评论 -
微软100题-天天做-第24题
第24题(链表):链表操作,单链表就地逆置,Collections.reverse(list);原创 2014-03-29 14:43:45 · 892 阅读 · 0 评论 -
微软100题-天天做-第12题
第12题(语法)题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。这道题真抓狂。其实很简单。package com.microsoft;public class NPlus { private int sum; private int start; private int end;原创 2014-03-28 21:08:11 · 693 阅读 · 0 评论 -
微软100题-天天做-第18题
第18题(数组):题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。July:我想,这个题目,不少人已经 见识过了。原创 2014-03-28 23:13:51 · 678 阅读 · 0 评论 -
图的最大流-前置推送标签方法
package com.data.struct;public class RelabelToFront { private Node[][]graphic; private Node s; private Node t; public RelabelToFront(){ graphic=new Node[6][6]; Node node0=new Node(); nod原创 2014-04-15 13:17:28 · 973 阅读 · 0 评论 -
数据结构-用数组实现队列
package com.data.struct;public class ArrayQueue { private int []data; private int head; private int tail; private boolean full; public ArrayQueue(int size){ data=new int[size]; head=0; ta原创 2014-03-18 19:17:42 · 766 阅读 · 0 评论 -
JDK源码研究PriorityQueue(优先队列)
Priority Queue 目的:通过对JDK源码的分析,进一步了解堆和优先队列,体会JDK源码的优美之处。目录: 1:概念 2:源码结构 3:方法分析概念:概念1:堆堆,n个关键字序列K1,K2,…,Kn,当且仅当该序列满足如下性质称为堆ki≤K2i且ki≤K2i+1(最小堆) 或 (2)Ki≥K2i且ki≥转载 2014-03-18 20:26:26 · 2531 阅读 · 1 评论