自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Leetcode 92

题目如下:Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note: Given m, n satisfy the f

2017-09-06 14:50:09 268 1

原创 台阶问题

1 问题描述 1. 楼梯有n个台阶,上楼可以一步上1阶,也可以一步上2阶,一共有多少种上楼的方法?斐波那契数列 第一项为1 第二项为2 也就是f(n)=f(n-1)+f(n-2),用递归求。给个分析的例子:有一个11级的台阶,一个人可走一步也可走两步,问这个人有多少种方法走完这个台阶?解:①只用一步走:1+1+1+1+1+1+1+1+1+1+1=11,共11步,只有C11,1=1种

2017-09-02 10:42:52 604

原创 贪心算法

1 贪心算法的定义:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般步骤是:1.建立数学模型来描述问题;2.把求解的问题分成若干个子问题;3.对每一子问

2017-09-02 10:11:34 354

原创 斐波那契数列

1 介绍 Fibonacci数列,定义如下: f(1)=f(2)=1 f(n)=f(n-1)+f(n-2) n>=3。 计算第n项Fibonacci数值。2 实现/** * * @author xld * */public class FibonacciSequence { // 定义全局数组,承装斐波那契数列 private static

2017-09-02 10:07:48 323

原创 二分搜索树--完整版

1介绍包含二分搜索树的插入,删除,遍历,等几乎全部功能 ,如果想知道什么是二分搜索树,请查看我的上一篇博客,废话少说,上代码2 实现–完整版import java.util.LinkedList;/** * 二分搜索树 * * @author xld * * @param <Key> * @param <Value> */public class BST<Key extends

2017-09-01 20:21:12 217

原创 二分搜索树

1 什么是二分搜索树二分搜索树,也叫二叉查找树(Binary Search Tree),有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉

2017-09-01 20:02:08 187

原创 二分查找

1 算法分析 二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5<6,则6必然在5之后

2017-09-01 14:24:26 192

原创 索引堆

1 原理 堆(heap)是一种常见的数据结构,经常用来实现优先队列。其中最常见的是二叉堆(binary heap)。由于它特殊的性质(二叉满树)所以可以用数组高效的实现。 堆还能用来进行排序,堆排序(heap sort)具有快速(复杂度O(N * logN)),稳定的特点,尤其是非常稳定,因此适用于某些需要排序稳定性的场合。 But,普通的二叉堆有两个缺陷: 1,在堆中

2017-09-01 13:53:19 216

原创 堆排序

1 排序原理具体什么是堆排序请自行查阅,不在此博客内容,本实例使用原地堆排序,先将数组建成一个最大堆,再将堆顶元素取出放在数组末尾。2 实现/** * 对数组进行原地堆排序 * @author xld * */public class HeapSort { /** * 原地堆排序 * @param arr */ public static vo

2017-09-01 09:21:01 162

原创

1 堆介绍堆是一棵根最大(最小)的完全二叉树 本示例用数组存储一棵最大堆,Java语言实现2 实现/** * Java实现最大堆 * @author xld * */public class MaxHeap { private int[] data; private int count; private int capacity; //构造函数

2017-08-31 20:07:56 147

原创 求数组中第n大(小)的元素

1 算法原理使用快速排序进行查找,类似于二分查找的意思,因为每次都会有一个元素找到适当位置,该位置就是这个元素在数组中的排列顺序。每次partition会返回一个数组下标,将该数组下标的元素和待查找的值进行比较,如果相等,直接返回,如果大于,取partition操作后的右一侧,反之,取左一侧。2 时间复杂度 利用快速排序进行查找,类似与二分查找思想,其操作数为n+n/2+n/4+.....

2017-08-31 18:43:58 504

原创 求逆序对

1 原理归并排序求逆序对 ,归并排序是将数列a[l,h]分成两半a[l,mid]和a[mid+1,h]分别进行归并排序,然后再将这两半合并起来。在合并的过程中(设l<=i<=mid,mid+1<=j<=h),当a[i]<=a[j]时,并不产生逆序数;当a[i]>a[j]时,在前半部分中比a[i]大的数都比a[j]大,将a[j]放在a[i]前面的话,逆序数要加上mid+1-i。因此,可以在归并排序中的

2017-08-31 16:43:32 168

原创 三路快排

1 算法原理 将数组划分为三部分,大于v,小于v和等于v,设置三个指针,优点就是无需对重复元素进行重复操作,性能有所优化2 时间复杂度O(logn*n)3 实现/** * 三路快排 * * @author xld * */public class QuickSortThreeWay { public static void sort(int[] arr) {

2017-08-31 15:01:59 296

原创 双路快排

1 排序原理 它是随机快速排序的优化,将小于表定点和大于表定点的元素的位置放在数组的两端,设置两个指针,指针对撞 ! 好处是将等于v的元素分散到数组的两部分,当面临大量的重复键值的情况下,可以保证不会将算法退化到O(n^2)的情况2 时间复杂度O(logn*n)3 实现/** * 双路快排 指针对撞 * * @author xld * */public class Q

2017-08-31 14:50:37 279

原创 快速排序 Java

1 排序原理 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。其为冒泡排序的优化2 时间复杂度O(logn*n) 最坏时间复杂度:O(n^2)3 实现/** * 快速排序 * * @author xld *

2017-08-31 14:17:24 186

原创 归并排序 Java

1 排序原理归并排序是分治法的一个典型应用,简单来说,归并排序分为两部分,第一部分是拆,就是将数组的长度一层一层往下拆,第二部分就是将拆好的一个一个相邻的数据进行合并,在这一步里面我们进行排序。整体思想其实非常简单 2 时间复杂度O(logn*n)正如其他的高级排序算法一样,归并排序其实也就是减少我们进行排序的重复操作。拆分的时候,采用二分的方式,所以有logn层,而每层比较的次数就是n喽,所以

2017-08-31 10:19:18 199

原创 选择排序

1 排序原理选择排序最符合大家对排序的原始想法,就是将待排序的数据中把最小的选出来,然后放入已经排好序的数据中,就这么简单2 时间复杂度O(n^2)选择排序的想法最简单,但是其性能也是真的不高3 代码实现/** * 选择排序算法 * @author xld * */public class SelectionSort { public static void sort(in

2017-08-31 09:06:10 177

原创 插入排序 Java

1 基本原理插入排序就是将未排序的数据插入到已经排序数据的适当位置,插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成

2017-08-31 08:58:07 283

原创 希尔排序 Java实现

1 希尔排序原理希尔排序也成为“缩小增量排序”,其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列“基本有序”后,最后在对所有元素进行一次直接插入排序。因此,我们要采用跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。希尔排序是对

2017-08-31 08:46:52 209

原创 什么是base标签

前言: HTML:超文本标记语言 。所以:第一,HTML=文本+标记。第二 ,它是门单独的语言 。HTML其实是网页内容的载体。 我们再学HTML之前呢,我想先分享以下我的观点。其实HTML就可以理解为网页,而HTML的属性就可以理解为是一个一个封装好的类,当你想要向用户展示的时候,你就可以调用p类(p标签)。当你想要采集用户信息的时候,你就调用input类(in

2017-04-21 20:12:27 1030

原创 OSI七层模型

赋: 说起现代,发展最快的就算是计算机了,全世界无数台计算机,如何能实现其相互之间的通讯,就是通过计算机协议。啥意思,就像是规定了计算机之间的普通话,实现计算机之间的通讯,就是要规定一些规矩,然后才好办事情。 1 OSI七层模型和TCP/IP四层模型 建立模型的主要就是为了解决异种网络互联的时候所遇到的兼容问题。它最大的优点就是i将服务,接口和协议这三个概念明确的区

2017-04-20 09:06:17 242

原创 什么是哈希表

想写博客很久了,一直没有时间,也不知道从何写起,现在想想,其实早就应该写一写了,就从哈希表开始吧。哈希表在面试中,特别是一面中,是会经常问到的数据结构,对于哈希表的理解。说了这么多,我们还是来看一看到底什么是哈希吧 哈希表,也叫散列表,散列散列,就是分散排列,什么意思呢,说到这个,我们还得说说为什么会有散列的出现存在即合理,这个我想大家都听说过,在我们常见的存储结构中,有这么两种是最常用的,一

2017-04-19 18:39:01 646

原创 第一次面试经历

巴拉巴拉

2017-03-14 09:25:34 668

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除