__七把刀__

新的文章请移步简书查看 http://www.jianshu.com/u/4d4a2f26740b

寻找第K小的数

前言 寻找第K小的数属于顺序统计学范畴,通常我们可以直接在O(NlgN)的时间内找到第K小的数,使用归并排序或者堆排序对输入数据按从小到大进行排序,然后选择第K个即可。然而,我们还有更好的算法。 一、热身—最大值和最小值 首先来看一个简单的问题,在一个有n个元素的集合中,需要多少次比...

2012-08-31 17:15:08

阅读数 7047

评论数 0

自己动手写二叉堆

一、二叉堆概念 二叉堆一种数组对象,可以被视为一棵完全二叉树,树中每个结点和数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层除外。表示堆的数组有两个属性对象,其中length[A]表示数组A中的元素个数,而heap-size[A]则表示存放在A中的堆的元素个数。heap-si...

2012-08-30 22:54:04

阅读数 1772

评论数 0

自己动手写快速排序

自己动手写快速排序 快速排序算法不算复杂的算法,但是实际写代码的时候却是最容易出错的代码,写的不对就容易死循环或者划分错误。所以还是自己动手多写会印象深刻点。 一、初探—朴素的快速排序算法 void quick_sort(int a[], int l, int u) { ...

2012-08-29 22:32:00

阅读数 1455

评论数 0

随机算法全面总结

随机算法涉及大量概率论知识,有时候难得去仔细看推导过程,当然能够完全了解推导的过程自然是有好处的,如果不了解推导过程,至少记住结论也是必要的。本文总结最常见的一些随机算法的题目,也当作面试的准备工作吧。需要说明的是,这里用到的随机函数都假定它能随机的产生范围[a,b]内的整数,即产生每个整数的概率...

2012-08-29 16:21:27

阅读数 7654

评论数 0

复杂链表的复制

原文地址:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/ 题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。其结点的...

2012-08-28 20:23:36

阅读数 1054

评论数 0

组合算法面试题

组合算法题往往有多个变种,如求一个集合的全部子集以及部分组合问题,这篇文章对这些常见的面试题做个汇总,权当做个记录,以免自己哪天忘了,难得到网路上去找。 一、求一个集合的全部子集 题目:给定一个集合s={a, b, c, d},试给出一个算法输出该集合的除了空集之外的全部子集。 分析:我们知...

2012-08-28 17:32:27

阅读数 4920

评论数 0

递归面试题汇总

一、前言 找工作面试时最喜欢问的是算法题,虽然我觉得有些取巧的算法题只是跟刷题量有关。但是为了找工作不得不加强算法,特别是基础算法,这是一个人基本功的体现。《算法导论》是不错的教材,不过大部头看起来确实需要发时间,到现在还只是大略看了一遍,很多推导过程没细心看下来,深以为憾,以后有时...

2012-08-27 21:30:31

阅读数 5865

评论数 4

数学之美—快排为什么那样快

本文转载自刘未鹏的博客,写的太好了,学习ing。特别是称球问题的描述,让人耳目一新。 原文地址:http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quick/ 目录 0. 前言 1. 猜数字 2. 称球 ...

2012-08-27 15:47:23

阅读数 1754

评论数 0

背包问题汇总

本文主要来源于《背包问题九讲》,我主要选择了比较简单的0-1背包问题和完全背包问题进行汇总,并加入了python代码实现,刚重装系统,手头没有C编译器,汗。 一、背包问题概述         背包问题包括0-1背包问题、完全背包问题、部分背包问题等多种变种。其中,最简单的是部分背包问题...

2012-08-26 15:38:54

阅读数 2486

评论数 0

JAVA NIO总结(四)—网络和异步IO

9、连网和异步 I/O 概述 连网是学习异步 I/O 的很好基础,而异步 I/O 对于在 Java 语言中执行任何输入/输出过程的人来说,无疑都是必须具备的知识。NIO 中的连网与 NIO 中的其他任何操作没有什么不同 ― 它依赖通道和缓冲区,而您通常使用 InputStream 和 Outp...

2012-08-24 20:25:29

阅读数 4084

评论数 5

JAVA NIO总结(三)—分散聚集、文件锁定、字符集

6、分散和聚集 概述 分散/聚集 I/O 是使用多个而不是单个缓冲区来保存数据的读写方法。 一个分散的读取就像一个常规通道读取,只不过它是将数据读到一个缓冲区数组中而不是读到单个缓冲区中。同样地,一个聚集写入是向缓冲区数组而不是向单个缓冲区写入数据。分散/聚集 I/O 对于将数据流划分为单...

2012-08-24 20:17:12

阅读数 2821

评论数 0

JAVA NIO总结(二)—缓冲区原理

4、缓冲区的内部细节 概述 本节将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor)。 状态变量是前一节中提到的"内部统计机制"的关键。每一个读/写操作都会改变缓冲区的状态。通过记录和跟踪这些变化,缓冲区就可能够内部地管理自己的资源。 在从通道...

2012-08-24 19:29:30

阅读数 2092

评论数 0

JAVA NIO总结(一)—基本概念

本系列文章只是对JAVA NIO的知识做一个汇总,所有内容都来自网络,原文地址http://www.ibm.com/developerworks/cn/education/java/j-nio/index.html。 1、输入/输出:概念性描述 1.1) I/O简介 I/O  或者输入/输...

2012-08-24 17:26:20

阅读数 1893

评论数 0

也谈走台阶问题

问题 刚才在首页看到一篇博客,说的是腾讯的一道面试题:一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法?博主把这题分析的很麻烦。引来很多人围观。我以前也碰到过这个问题。写出来和大家分享一下。 举个例子,假设有3个台阶,则有三种走法:分别是,1-1-1...

2012-08-22 10:59:33

阅读数 1020

评论数 0

最大公约数(Gcd)两种算法(Euclid && Stein)

转载自:http://www.cnblogs.com/drizzlecrj/archive/2007/09/14/892340.html 很老的东东了,其实也没啥好整理的,网上很多资料了,就当备用把:-) 1. 欧几里德算法和扩展欧几里德算法 欧几里德算法 欧几里德算法又称辗转相...

2012-08-20 10:30:50

阅读数 1077

评论数 0

排序算法大杂烩(一)——基础排序

一、前言 排序算法也是面试中常常提及的内容,问的最多的应该是快速排序、堆排序。这些排序算法很基础,但是如果平时不怎么写代码的话,面试的时候总会出现各种bug。虽然思想都知道,但是就是写不出来。本文打算对各种排序算法进行一个汇总,像插入排序、冒泡排序、选择排序等就简单的介绍,重点关注快速排序和堆排...

2012-08-19 22:18:53

阅读数 848

评论数 0

链表合并算法

题目 已知两个有序链表,试合并这两个链表,使得合并后的链表仍然有序(注:这两个链表没有公共结点,即不交叉)。 分析 既然两个链表都是有序的,所以合并它们跟合并两个有序数组没有多少区别,只是链表操作涉及到指针,不能大意。 方法一:非递归方法 使用2个指针list1和list2分别遍...

2012-08-19 20:26:11

阅读数 1731

评论数 0

二分查找之谜题

一、前言 二分查找本身是个简单的算法,但是正是因为其简单,更容易写错。甚至于在二分查找算法刚出现的时候,也是存在bug的(溢出的bug),这个bug直到几十年后才修复(见《编程珠玑》)。本文打算对二分查找算法进行总结,并对由二分查找引申出来的问题进行分析和汇总。若有错误,请不吝赐教。 ...

2012-08-19 16:19:04

阅读数 1127

评论数 0

有序的循环链表中插入结点

题目 给定一个有序的循环链表,在其中插入一个值,保持该循环链表依然有序。 分析 首先看下循环链表的结构,如下图所示为一个循环链表,其尾结点指向头结点,从而形成一个循环。给定的链表结点可以是链表任意一个结点,这个结点不一定是链表头结点,从而这也增加了该题的难度。 此时若是要在链表中插...

2012-08-17 21:43:37

阅读数 2648

评论数 0

链表相交问题

题目: 给定两个单向链表的头结点指针,比如为h1和h2,判断这两个链表是否相交。 分析: 一、先来分析链表不存在环的情况。 编程之美和JULY的博文闲话链表追赶问题上对该题都有详述,拿来用了。 1.直接循环判断第一个链表的每个节点是否在第二个链表中。但,这种方法的时间复杂...

2012-08-17 20:09:13

阅读数 1100

评论数 3

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