自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

__七把刀__

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

  • 博客(155)
  • 收藏
  • 关注

转载 翻转句子中单词的顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试、面试题的热门题目。本题也曾多次受到包括微软在内的大量公司的青睐。

2012-07-29 22:07:28 1714 1

原创 判断一个整数是否是回文数

问题判定一个正整数是否是一个回文数。例如12121是回文数,而1231不是回文数。解法1:转换成字符串再判断要判断一个整数是否是回文数,最自然的想法是把整数转换成一个字符串,然后根据回文的对称特性进行判断。数字转换为字符串可以通过itoa函数实现,判断字符串是否为回文字符串代码如下:bool isPalindrome(string &str){ int b

2012-07-29 16:47:15 13838 2

转载 从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小

问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。解法:这是双端 LIS 问题,用 DP 的思想可解,目标规划函数 max{ b[i] + c[i] }, 其中 b[i] 为从左到右, 0 ~ i 个数之间满足递增的数字个数; c[i] 为从右到左, n-1 ~ i 个数之间满足递增的数字个数。最后结果为 n - max + 1。其中 DP 的时候,可以

2012-07-29 15:52:47 3682 1

原创 最长递增子序列

问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4. 解法1:最长公共子序列法这个问题可以转换为最长公共子序列问题。如例子中的数组A{5,6, 7, 1, 2, 8},则我们排序该数组得到数组A‘{1, 2, 5, 6, 7

2012-07-29 15:25:08 10796 5

原创 将有序数组转换为平衡二叉搜索树

问题给定一个有序数组,数组元素升序排列,试将该数组转换为一棵平衡二叉搜索树(Balanced Binary Search Tree)。 思路这个问题用递归很容易解出来。考虑下面一棵二叉搜索树:这是一棵平衡的二叉搜索树,所谓平衡的定义,就是指二叉树的子树高度之差不能超过1。如果要从一个有序数组中选择一个元素作为根结点,应该选择哪个元素呢?我们应该选择有序数组的中间元素作为

2012-07-26 08:27:04 10306

原创 中序遍历和先序遍历/后序遍历构建二叉树

1、问题给定二叉树的2个遍历序列(如先序+中序,先序+后序,中序+后序等),是否能够根据这2个遍历序列唯一确定二叉树?2、理论分析数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不同遍历序列(先序、中序、后序),重构二叉树。显然,这三种组合并不是都能唯一确定二叉树的,其

2012-07-25 15:02:23 29312 13

转载 Linux bash快捷键大全

用快捷键,有两个好处:1 成就感!2 效率!停下手里活,学点一举两得的小技能,保证五分钟搞定!“棕色粗体”表示“我推荐的”!Ctrl-A 相当于HOME键,用于将光标定位到本行最前面Ctrl-E 相当于End键,即将光标移动到本行末尾Ctrl-B 相当于左箭头键,用于将光标向左移动一格Ctrl-F 相当于右箭头键,用于将光标向右移动一格Ctrl-D 相当于D

2012-07-25 10:30:25 1454

转载 数字签名是什么—讲解数字签名最通俗易懂的文章

今天,我读到一篇好文章。它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。我对这些问题的理解,一直是模模糊糊的,很多细节搞不清楚。读完这篇文章后,发现思路一下子就理清了。为了加深记忆,我把文字和图片都翻译出来了。文中涉及的密码学基本知识,可以参见我以前的笔记。=======

2012-07-24 20:05:29 1428

转载 一致性哈希算法详解

一致性 hash 算法( consistent hashing ) consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object

2012-07-24 19:50:04 1700

原创 Cassandra数据模型

Cassandra数据模型一、几个概念Cluster:集群,一个逻辑上的cassandra实例包含的节点。一个集群可以包含多个keyspace。 Keyspace:Column Family的名字空间,通常是一个应用一个keyspace。 Column Family:包含多个column,每个column包括name,value, timestamp。Column Family通过

2012-07-24 19:37:21 1523

原创 序列化/反序列化二叉树

题目设计一个算法能够实现序列化和反序列化一棵二叉树(注意,不是二叉搜索树BST)。这里的序列化指的是将一棵二叉树保存到文件中,反序列化就是从文件中读取二叉树结点值重构原来的二叉树。思路前一篇文章保存二叉搜索树到文件中  解决了保存一棵二叉搜索树到文件中的问题,但是由于本题目的意思是要把一棵二叉树保存到文件中并从文件中读出重构二叉树。因为二叉树不一定是二叉搜索树,所以前面文章中的

2012-07-24 08:48:47 16818

原创 保存二叉搜索树到文件中

问题:设计一个算法,将一棵二叉搜索树(Binary Search Tree,BST)保存到文件中,需要能够从文件中恢复原来的二叉搜索树。注意算法的时空复杂度。思路:二叉树遍历算法有先序遍历、中序遍历、后序遍历算法等。但是它们中间只有一种遍历算法符合题目条件,用于保存BST到文件中并从文件中恢复原来的BST。假定我们要保存的BST如下:    _ 30_   /

2012-07-23 11:28:10 7786 1

原创 二叉树遍历之非递归算法

在前一篇文章二叉树遍历递归算法对二叉树遍历的递归算法做了总结,这篇文章就来对二叉树遍历的非递归算法做个汇总。还是与上一篇文章一样的顺序,一一汇总先序、中序、后序以及层序遍历的非递归算法。1、先序遍历(非递归算法)先序遍历非递归访问,使用栈即可实现。先序遍历的非递归访问在所有的遍历中算是最简单的了。主要思想就是先将根结点压入栈,然后根结点出栈并访问根结点,而后依次将根结点的右孩子、左

2012-07-22 22:30:26 33198 21

原创 二叉树遍历之递归算法

二叉树的遍历算法有多种,典型的有先序遍历、中序遍历、后序遍历以及层序遍历。而且这些遍历的递归算法较为简单,代码很少,容易实现,本文就是汇总二叉树遍历的递归算法,非递归算法将在下一篇文章中进行总结。本文中用到的二叉树实例如下: 3 / \ 9 20 / \ 15 7二叉树定义和辅助函数如下:struct node {

2012-07-22 19:31:35 13212 3

转载 brk(), sbrk() 用法详解

brk() , sbrk() 的声明如下:#include int brk(void *addr);void *sbrk(intptr_t increment);这两个函数都用来改变 "program break" (程序间断点)的位置,这个位置可参考下图:如 man 里说的:引用brk()  and  sbrk() change the location of

2012-07-22 12:11:59 34034 11

原创 判定一棵二叉树是否是二叉搜索树

问题给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)?解法1:暴力搜索首先说明一下二叉树和二叉搜索树的区别。二叉树指这样的树结构,它的每个结点的孩子数目最多为2个;二叉搜索树是一种二叉树,但是它有附加的一些约束条件,这些约束条件必须对每个结点都成立:结点node的左子树所有结点的值都小于node的值。结点node的右子树所有结点的

2012-07-21 20:18:05 22535 5

原创 Cassandra启动过程详解

<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->Cassandra启动过程详解这里的分析从CassandraDaemon.java文件开始。一、配置文件storage-config.xml的读取和log4j的配置文件log4j.property的设置。配置文件的读取和解析都是在org.apache.c

2012-07-20 11:26:19 5034

原创 Cassandra失效检测原理

<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->Cassandra失效检测原理一、传统失效检测及其不足传统失效检测方法在分布式系统中经常使用心跳(Heartbeat)来检测Server的健康状况,但从理论上来说,心跳无法真正检测对方是否crash,主要困难在于无法真正区别对方是宕机还是“慢”。传统的检

2012-07-20 11:15:14 2351

原创 Cassandra中布隆过滤器详解

<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->Cassandra中BloomFIlter实现详解零、BloomFilter原理概述http://hi.baidu.com/waxiga/blog/item/33ef2ff49b138530bd3109ad.htmlhttp://pages.cs.wis

2012-07-20 11:12:15 4390

原创 二叉树问题汇总(2)—常见问题

在上一篇二叉树问题汇总(1)中总结了下二叉树的一些基本问题,主要是针对二叉排序树。这篇文章主要汇总二叉树的一些常见的但是难度稍大一点的问题。1、判定二叉树是否存在和为给定值的路径问题:给定一个值,判定二叉树是否存在从根结点到叶结点的路径,其结点的数据之和为该值。比如二叉树如下所示,给定的和为27:则二叉树存在的根结点到叶结点的路径有:path 1: 5 4 11 7

2012-07-19 21:43:49 2069

原创 二叉树问题汇总(1)—基础问题

1、创建二叉搜索树二叉搜索树是排序的二叉树,即左子树的值都不大于根结点,右子树的值都比根结点大。插入结点到一颗二叉搜索树可以使用递归或者非递归方法。使用递归方法代码简单,使用非递归则易于理解。二叉搜索树BST定义:struct node { int data; struct node* left; struct node* right;};二叉搜索树创建结点

2012-07-19 21:09:44 2218

原创 链表复制算法

问题已知一个简单链表,请复制链表并返回头结点指针。解法1:遍历算法从头开始遍历原链表,依次复制链表各个节点。结点定义如下:struct node { int data; struct node* next;};typedef struct node* pNode;创建新结点newNode代码:pNode newNode(int data)

2012-07-18 20:26:57 6641

原创 正则表达式简易实现

正则表达式       虽然正则表达式在 U n i x/Linux程序设计环境里随处可见,但在其他的系统里使用得却没有这么广泛。一个正则表达式本身也是一个字符序列,它定义了一集能与之匹配的字符串。大部分字符只是简单地与相同字符匹配,例如正则表达式 a b c将匹配同样的字符序列,无论它出现在什么地方。在这里还有几个元字符(meta character),它们分别表示重复、成组或者位置。

2012-07-18 19:17:03 2347

原创 链表逆序算法

问题:给定一个链表,请将其逆序。即如果链表原来为1->2->3->4->5->null,逆序后为5->4->3->2->1->null.解法1:迭代算法迭代算法效率较高,但是代码比递归算法略长。递归算法虽然代码量更少,但是难度也稍大,不细心容易写错。迭代算法的思想就是遍历链表,改变链表节点next指向,遍历完成,链表逆序也就完成了。代码如下:struct node {

2012-07-17 10:20:36 7111

原创 在数组中找出3个数使得它们和为0

题目:给定一个集合S,试找出3个数a, b, c,使得a+b+c=0。也即从集合中找出所有的和为0的3个数。例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)与(-1,0,1)算同一个解,所以不用重复考虑。当然该例子集合的解也可以写成:(0, 1, -1)和(2, -1, -1)。

2012-07-17 09:17:19 6535 3

原创 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

题目:已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数。思路:假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢?解法:该解法基于一种叫做拒绝采样的方法。主要思想是只要产生一个目标范围内的随机数,则直接返回。如果产生的随机数不在目标范围内,则丢弃该值,重新取样。由于目标范围内的数字被选中的

2012-07-16 21:12:41 8927 3

原创 设计包含min函数的栈

题目:设计一个栈,使得PUSH、POP以及GetMin(获取栈中最小元素)能够在常数时间内完成。 分析:很刚开始很容易想到一个方法,那就是额外建立一个最小堆保存所有元素,这样每次获取最小元素只需要O(1)的时间。但是这样的话,PUSH和POP操作就需要O(lgn)的时间了(假定栈中元素个数为n),不符合题目的要求。那么用1个辅助栈如何呢?解法:使用一个辅助栈来保存最...

2012-07-16 20:45:22 7772

原创 杨氏矩阵搜索算法

问题:已知一个2维矩阵,其中的元素每一行从左至右依次增加,每一列从上到下依次增加。即对于矩阵Table有Table[i][j] ≤Table[i][j + 1], Table[i][j] ≤ Table[i + 1][j],我们也称这样的矩阵为杨氏矩阵。给出判定某个数是否存在该矩阵中的高效算法。 分析:为了便于复杂度分析,我们暂时假定该矩阵为大小n*n。如下图所示为一个杨氏矩阵。

2012-07-13 22:02:51 14813 12

原创 几个有关递归的算法题

题目1:只给定putchar函数(没有printf,itoa等函数),按十进制方式打印输出无符号整数。比如输入123,打印出123思路:很显然的可以通过递归来实现,递归就好比分配一个栈,然后将数字每个位依次压入栈,然后依次出栈即可。比如数字123入栈为1,2,3,最后输出123代码1:void putlong(unsigned long n) { if (n == 0) r

2012-07-13 16:46:24 1594

转载 Hashtable与HashMap引发的血案

人物:王小胖:性别:男。程序员,工作经验 1 year 。爱好:吃肉、电玩、马小花。特技:吃肉不用考虑胃的容量。马小花:性别:女。学生,工作经验 0 year 。爱好:蛋糕、臭美、王小胖。特技:能够降服王小胖…… /**2011 年 2 月, 电影《将爱情进行到底》火得不得了。周末,小胖也陪着小花去看这部电影。放映中,小花被影片中的靖哥哥和杜拉拉感动的一沓糊涂,而小胖则心里暗自后悔

2012-05-18 17:12:02 1403

原创 JAVA类库分析之HashMap

JAVA类库分析之HashMap1.   HashMap概述1.1)重要参数HashMap是什么,相信大家都很清楚,这里偷个懒,从网上摘了一段描述HashMap的文字:HashMap是基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null值和 null 键。(除了HashMap非同步和允许使用 null之外,HashMap类与 Hashtable大致

2012-05-18 15:52:20 3899 5

原创 JAVA类库分析之BitSet

JAVA类库分析之BitSet1.BitSet概述      BitSet实现了一种比特位的向量,能够自动增长,用途很广泛。如在bloom filter中会用到BitSet来标识某一位是否置位等。初始情况下所有位都为false。主要的变量如下表中所示,下面分析的时候会详细介绍这些变量的用处。首先可以注意到用来存储位向量的数组words为long类型,也就是说每一个值可以保存64位信息,所以

2012-05-16 22:18:55 2944

原创 JAVA类库分析之LinkedList

JAVA类库分析之LinkedList1.概述        在java源码中对LinkedList有详细的描述:LinkedList实现了List接口和Deque接口,即表示它支持List的一些常规操作如insert,get,remove等;同时它还支持FIFO双向队列操作如add,poll操作,以及栈和队列的其他操作等。        与Vector和ArrayList不同之处在于

2012-05-15 21:00:50 1948

原创 JAVA类库分析之Vector

看同学人手一本《STL源码剖析》,实在亚历山大。借过一看,实在晦涩难懂。于是想着从熟悉的java入手,看看java里面自带的类库是怎么实现这些容器的。于是乎,便有了这个java stl系列。其实这个名字是我自己起,java里面提供了许多常用的类库,使用十分方便。废话不多说,从Vector类开始分析吧。Vector类与ArrayList的实现基本相同,只是Vector类是线程安全的,而Array

2012-05-14 19:28:34 2457

原创 JAVA泛型编程全面总结

JAVA泛型编程总结                                                                                                                                                               ——by书生1介绍Java泛型编程是JDK1.5版

2012-05-14 19:21:54 3619 2

空空如也

空空如也

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

TA关注的人

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