__七把刀__

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

排序:
默认
按更新时间
按访问量
RSS订阅

自己动手写垃圾收集器

之前写过几篇自己动手系列的文章,简要实现了栈,二叉堆,malloc等函数,对于垃圾收集器,一直也有所耳闻。像python中主要使用引用计数手段来管理内存,为了解决循环引用的问题,引入了分代收集和标记-清除方式。当然python中可能产生循环引用的只可能是容器类对象如list,dict,class等...

2015-05-17 17:28:54

阅读数 1909

评论数 0

怎样写一个拼写检查器

怎样写一个拼写检查器  Peter Norvig 翻译: Eric You XU 原文地址:http://blog.youxu.info/spell-correct.html 上个星期, 我的两个朋友 Dean 和 Bill 分别告诉我说他们对 Google 的快速高质量的拼写...

2013-06-14 17:50:30

阅读数 1647

评论数 0

找出二叉树中最大的子树,且子树为二叉搜索树

题目 找出二叉树中最大的子树,该子树为二叉搜索树。所谓最大的子树就是指结点数目最多的子树。 分析 该题目是要找出二叉树中最大的子树,该子树必须是二叉搜索树(BST)。子树的概念需要重点关注一下,以下面一棵二叉树为例          ____10____ / ...

2012-10-05 22:16:09

阅读数 2823

评论数 0

自己动手写内存分配函数malloc

一、关于malloc 很早就想写这篇文章了,一直拖着没有写,是想写个更完善的版本,不过最近确实没有太多时间去考虑一个很完整的版本,只有先把这个简单的版本写出来了。据说在微软今年招实习生的时候面过这个题目。 malloc()是C语言中动态存储管理的一组标准库函数之一,其作用就是从内存的动态存储区...

2012-09-13 21:51:37

阅读数 5358

评论数 0

二叉搜索树转换成有序的双向循环链表(一)

题目描述 给定一棵二叉排序树(BST),将该树转换成一棵双向循环链表。请看下面的图示说明,你可以更清楚的了解题意。 BST的结构定义如下: struct node { int data; struct node* left; struct node* right; }...

2012-09-03 22:46:53

阅读数 2855

评论数 0

二叉树两结点最低公共祖先结点(二)

问题 在前面的文章二叉树两结点最低公共祖先结点(一) 中有探讨过这个问题,不过本文考虑的是另外一种二叉树,该二叉树每个结点包含一个指向父结点的指针,根结点的父结点为NULL。其结构如下: struct node { int data; s...

2012-09-03 17:37:22

阅读数 2301

评论数 2

二叉搜索树两结点最低公共祖先结点

题目 给定一棵二叉搜索树(BST),找出树中两个结点的最低公共祖先结点(LCA)。二叉搜索树结点定义: struct node { int data; struct node* left; struct node* rig...

2012-09-03 16:29:42

阅读数 2407

评论数 2

二叉树两结点的最低公共祖先结点(一)

题目 二叉树结点的定义如下: struct node { int data; struct node* left; struct node* right; }; 给定二叉树中的两个结点,输出这两个结点的最低公共祖先结点(LCA)。注意,该二叉树不一定是二叉搜索...

2012-09-02 23:01:42

阅读数 7796

评论数 4

寻找第K小的数

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

2012-08-31 17:15:08

阅读数 7035

评论数 0

自己动手写二叉堆

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

2012-08-30 22:54:04

阅读数 1772

评论数 0

随机算法全面总结

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

2012-08-29 16:21:27

阅读数 7647

评论数 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

阅读数 4919

评论数 0

递归面试题汇总

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

2012-08-27 21:30:31

阅读数 5853

评论数 4

背包问题汇总

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

2012-08-26 15:38:54

阅读数 2484

评论数 0

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

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

2012-08-20 10:30:50

阅读数 1076

评论数 0

链表合并算法

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

2012-08-19 20:26:11

阅读数 1728

评论数 0

二分查找之谜题

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

2012-08-19 16:19:04

阅读数 1124

评论数 0

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

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

2012-08-17 21:43:37

阅读数 2644

评论数 0

链表相交问题

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

2012-08-17 20:09:13

阅读数 1100

评论数 3

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