数据结构与算法
学习与分享数据结构与算法。。。
吃果冻不吐果冻皮
坚持输入+输出学习模式,并让其变成一种习惯。
展开
-
一致性哈希算法(consistent hashing)
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1转载 2015-08-20 15:29:45 · 703 阅读 · 0 评论 -
skiplist 跳跃表详解及其编程实现
skiplist介绍跳表(skip List)是一种随机化的数据结构,基于并联的链表,实现简单,插入、删除、查找的复杂度均为O(logN)。跳表的具体定义,请参考参考维基百科 点我,中文版。跳表是由William Pugh发明的,这位确实是个大牛,搞出一些很不错的东西。简单说来跳表也是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查转载 2015-08-20 14:20:26 · 1278 阅读 · 0 评论 -
朴素和KMP模式匹配算法(Java)
朴素模式匹配算法public class Test { //朴素模式匹配算法 public int Index(String s,String t,int pos){ int i = pos;//主串中第几个位置开始比较 int j = 0;//模式串中的第一个位置 while(i<s.length()&&j<t.lengt原创 2015-10-18 15:44:11 · 2556 阅读 · 0 评论 -
多叉树的查找(广度优先遍历)
昨天面试,面试官问了一个题,求一个多叉树里面是否存在某个值,假设多叉树里面的元素都不重复。由于之前一直没有接触过多叉树,所以当时没怎么写出来,当时只是给了自己的思路。import java.util.ArrayDeque;import java.util.ArrayList;import java.util.List;import java.util.Queue;class TreeNode{原创 2015-09-24 20:47:20 · 8868 阅读 · 0 评论 -
两个栈实现一个队列以及两个队列实现一个栈(Java)
两个栈实现一个队列import java.util.Stack;public class Demo07 { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) { stack1.原创 2015-09-02 10:51:44 · 7641 阅读 · 2 评论 -
几种排序算法综合比较(快速,归并,希尔,堆排序等)
排序分类各种指标对比原创 2015-07-26 23:25:25 · 1853 阅读 · 0 评论 -
递归和迭代两种方式实现归并排序(Java版)
递归版package MergeSort;import Utils.SortUtils;/** * 归并排序递归版 * @author liguodong */public class Demo02 { public static void mergeSort(int[] a){ mSort(a, a, 0, a.length-1); } /**原创 2015-07-26 21:43:32 · 5582 阅读 · 0 评论 -
希尔排序与堆排序(Java版)
希尔排序 package ShellSort;import Utils.SortUtils;public class Demo { public static void shellSort(int[] a){ int temp,j; int increment = a.length; do{ increment = incr原创 2015-07-26 21:13:43 · 1635 阅读 · 0 评论 -
冒泡,简单选择,直接插入排序(Java版)
冒泡,简单选择,直接插入这三种排序都是简单排序。工具类package Utils;import java.util.Arrays;public class SortUtils { public static void swap(int[] a,int i,int j){ int temp = a[i]; a[i] = a[j]; a[j] =原创 2015-07-26 20:51:00 · 1047 阅读 · 0 评论 -
顺时针打印矩阵
分析:特殊情况处理 代码:package arrays20;public class Demo01 { public static void ClockwisePrintMatrix(int[][] arrays,int columns,int rows){ if(arrays==null || columns<=0 || rows<=0){ retu原创 2015-06-23 10:59:44 · 1205 阅读 · 0 评论 -
判断一个数组是否是二叉搜索树的后序遍历(java)
分析: 代码:package Tree;public class VerifyBST { //第一个元素下标low,最后一个元素下标high public static boolean verifySequenceBST(int[] sequence,int low,int high){ if(sequence == null || high-low <0){原创 2015-06-18 22:35:50 · 2652 阅读 · 0 评论 -
快速排序及优化(Java版)
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。 一次快速排序详细过程: 选择数组第一个值作为枢轴值。 代码实现:package QuickSort;public class QuickSortRealize { public static void QuickSort(int[] arr){ QSort(ar原创 2015-06-12 20:56:36 · 5917 阅读 · 1 评论 -
字符串中的空格替换问题(Java版)
解决方案一:时间复杂度为O(n)解决方案二:时间复杂度为O(n^2) 代码实现:解决方案三:JDK自带的字符串切割代码实现:package string;public class SpaceStringReplace { public static String SpaceReplace(String strOld){ Stri原创 2015-06-12 10:39:06 · 1917 阅读 · 0 评论 -
二维数组中的查找(Java版)
解题思路: 首先,我们选择查找数子7为例来一步步分析查找的过程。 然后,我们选取数组右上角的9。 代码实现:package array;public class QuencyArray { public static boolean FindArray(int[][] arr,int number){ int rows = arr.length; int原创 2015-06-11 20:55:57 · 1875 阅读 · 0 评论 -
冒泡排序(Java版)
一、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样原创 2015-06-11 21:01:44 · 1537 阅读 · 0 评论