自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

MasaWong的专栏

Tech Otaku save the world

  • 博客(38)
  • 资源 (8)
  • 收藏
  • 关注

原创 9/29-10/6待字闺中面试题练习

题目来自待字闺中:http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5ODIzNDQ3Mw==&appmsgid=10000259&itemidx=1&sign=4ebbbb120407c33d1fee68a112621d97给定两个字符串A和B,判断A中是否包含由B中字符重新排列成的新字符串。例如:A=abcdef, B=ba,结果应该返回tru

2013-09-30 17:12:22 950

原创 84. 用不平均概率构造平均概率

已知一随机发生器,产生0 的概率是p,产生1 的概率是1-p,现在要你构造一个发生器,使得它构造0 和1 的概率均为1/2;构造一个发生器,使得它构造1、2、3 的概率均为1/3;...,构造一个发生器,使得它构造1、2、3、...n 的概率均为1/n,要求复杂度最低。HANDWRITING:产生0 的概率是p,产生1 的概率是1-p1、那么01,10的概率是一样的,使

2013-09-25 20:10:19 659

原创 76.复杂链表的复制

题目:有一个复杂链表,其结点除了有一个m_pNext 指针指向下一个结点外,还有一个m_pSibling 指向链表中的任一结点或者NULL。其结点的C++定义如下:struct ComplexNode { int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling;};下图是一个含有5 个结点的该类型复杂链表。

2013-09-25 17:11:02 732

原创 75.二叉树两个结点的最低共同父结点

题目:二叉树的结点定义如下:struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。分析:求数中两个结点的最低共同结点是面试中经常出现的一个问题。这个问题至少有两个变种。HANDWRITING:Tree

2013-09-25 09:53:59 569

原创 74.数组中超过出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。分析:这是一道广为流传的面试题,包括百度、微软和Google 在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。HANDWRITING:int search(int a[], int size) { int tmp

2013-09-25 09:49:52 619

转载 71. 数值的整数次方

题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:double Power(double base, int exponent){ double result = 1.0; fo

2013-09-23 16:01:58 510

原创 69.旋转数组中的最小元素

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N)。但这个思路没有利用输入数组的特性,我们应该能找到更好的解法。

2013-09-22 14:48:32 644

原创 68.把数组排成最小的数

题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。分析:这是09 年6 月份百度的一道面试题,从这道题我们可以看出百度对应聘者在算法方面有很高的要求。HANDWRITING:关键问题在于怎么排,从头依次比较数字,小者在前

2013-09-22 14:28:23 643

原创 67. 两个闲玩娱乐

1.扑克牌的顺子从扑克牌中随机抽5 张牌,判断是不是一个顺子,即这5 张牌是不是连续的。2-10 为数字本身,A 为1,J 为11,Q 为12,K 为13,而大小王可以看成任意数字。HANDWRITING:大小王当0,5张牌排好序bool straight (int poker[]) { int jokers = 0, i; for (i = 0; poker[

2013-09-22 09:33:23 1006

转载 66.颠倒栈

题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。HANDWRITING:用递归颠倒栈。。折腾。。void reverse (stack s) {if (stack.empty()) return ;int tmp = stack.top();stack.pop();

2013-09-21 23:17:44 655

原创 63.在字符串中删除特定的字符

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编程基本功。HANDWRITING:char *chang

2013-09-21 21:52:05 508

转载 61.找出数组中两个只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。HANDWRITING:如果数组里只有1个数字出现1次,其他的都2次,那轻轻松松秒掉2个的话,就轻轻松松的被秒掉,不会。。。来自剑指OFFER的解答:http://zhedahht.blog.163.com/blo

2013-09-21 20:53:17 543

原创 54.调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。HANDWRITING:void reset (int a[], int size) { int s = 0, e = size - 1; while (1) { while (a[s] % 2 == 1) ++s; while (

2013-09-21 20:41:32 462

原创 51.和为n连续正数序列

这是网易的一道面试题。题目:输入一个正数n,输出所有和为n 连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。HANDWRITING:想着用1 ~ i 的和偏移 j 个位置,即1+j + 2+j + …+ i+j = n ==> 1 + 2 +…+ i + i * j = n,开写v

2013-09-21 20:33:16 561

原创 48.微软,偏移数组中找数

一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。HANDWRITING:int find(int a[], int start, int end, int k) {if (start > end) return -1;int mid = start + (end - start)

2013-09-21 20:04:32 500

原创 47.创新工场:求最长递减子序列

求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}HANDWRITING:int sequence(int *input, int size, int *&output) { int *len = new int[size]; int max = 1, pos = 0; len[0] = 1; for (int i

2013-09-21 18:48:06 771

原创 46.搜狐:四对括号可以有多少种匹配排列方式

四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())HANDWRITING:之前左括号的数量必须比右括号多,即卡特兰数令h(0)=1,h(1)=1,catalan数满足递推式h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)例如:h(2)=h(0)*h(1)+h(1)*h(0)=

2013-09-21 16:11:00 1353

原创 38. 百度面试

1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x 次天平,最多可以从y 个小球中找出较轻的那个,求y 与x 的关系式。2.有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m 个记录。3.大量的URL 字符串,如何从中去除重复的,优化时间空间复杂度HANDWRITING:1

2013-09-21 13:48:55 601

原创 32. 交换ab中的值,使得差最小

有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小。例如:var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];HANDWRITING:首先求的2数组差D,交换一对数a[i],b[j],则差变化2(a[i] - b[j]

2013-09-21 13:25:56 840

原创 29.栈的push、pop 序列

题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。为了简单起见,我们假设push 序列的任意两个整数都是不相等的。比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列。因为可以有如下的push 和pop 序列:push 1,push 2,push 3,push 4,pop,pus

2013-09-20 20:09:03 520

原创 25. 在字符串中找出连续最长的数字串

写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,outputstr 所指的

2013-09-20 19:40:25 349

原创 24. 链表就地逆置

链表操作,(1).单链表就地逆置(2)合并链表HANDWRITING:struct Node {int value;Node *next;};(1).单链表就地逆置Node *reverse (Node *head) { Node *pre = 0, *cur = head, next = head->next; while (nex

2013-09-20 18:58:07 586

原创 22. 推理,猜头上的2张牌

有4 张红色的牌和4 张蓝色的牌,主持人先拿任意两张,再分别在A、B、C 三人额头上贴任意两张牌,A、B、C 三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,A 说不知道,B 说不知道,C 说不知道,然后A 说知道了。请教如何推理,A 是怎么知道的。如果用程序,又怎么实现呢?HANDWRITING:最爱智力题,头上的牌可以是2红,2蓝,红蓝,一共2个条

2013-09-20 16:42:15 11573

原创 21. 1~n任意取数组成m

输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数,使其和等于m ,要求将其中所有的可能组合列出来.TRY:void search(int n, int m, int *com, int pos) { if (m == 0) { for (int i = pos - 1; i >= 0; --i) cout<<com[i]<<" "; co

2013-09-20 16:07:59 728

原创 20. 字符串转整数

题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。TRY:int transform (string num) { if (num.length() == 0) return 0; string::iterator i = num.begin(); int flag = 1, n = 0; if (*i ==

2013-09-20 15:10:50 455

原创 18. 约瑟夫环

题目:n 个数字(0,1,…,n-1)形成一个圆圈,从数字0 开始,每次从这个圆圈中删除第m 个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m 个数字。求出在这个圆圈中剩下的最后一个数字。TRY:int joseph (int n, int m) { if (n == 0) return 0;

2013-09-20 14:12:03 461

原创 15. 转换二叉查找树

题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入:8/ \6 10/\ /\5 7 9 11输出:8/ \10 6/\ /\11 9 7 5定义二元查找树的结点为:struct BSTreeNode // a node in the

2013-09-20 13:43:41 383

原创 14. 排序数组中找和为n的两数

题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。TRY:void search(int *a, int size, int n) { int

2013-09-20 13:15:58 877

原创 13. 链表倒数第K个结点

题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};TRY:ListNode *lastk(ListNode *head, int k) { ListNode *knode = head; while

2013-09-20 13:02:52 407

原创 12. 求1+2+…+n

题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句(A?B:C)。HANDWRITING:1+2+...+n = (1 + n) * n / 2 = (n^2 + n) / 2;int square(int n) {}int sum (int n) { return (square(n

2013-09-20 12:53:39 689

原创 11. 求二叉树中节点的最大距离

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。HANDWRITING:int distance (node *root) { int lh, rh; if (root->m_pLeft == 0) lh = 0; else lh = distance

2013-09-18 23:05:34 443

原创 10. 翻转句子中单词的顺序。

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。TRY:string rollover (string sentence) { string sen = sentence; string::ite

2013-09-18 20:25:23 492

原创 9. 判断整数序列是不是二元查找树的后序遍历结果

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:8/ \6 10/ \ / \5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。TRY:

2013-09-18 17:43:27 495

原创 7. 微软亚院之编程判断俩个链表是否相交

给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?TRY:simple question:bool simpleIntersect(node *h1, node *h2) { if (h1 == 0 || h2 == 0)

2013-09-18 17:15:19 576

原创 6. 腾讯面试题

给你10 分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】举一个例子,数值: 0,1,2,3,4,5,6,7,8,9分配: 6,2,1,0,0,0,1,0,0,00 在下排出现了6 次,1 在下排出现了2 次,2 在下排出现了1 次,3 在下排出现了

2013-09-18 13:38:43 500

原创 3.求子数组的最大和

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。TRY:int maxSubarray (int *

2013-09-18 13:13:37 445

原创 2.设计包含min 函数的栈

定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。TRY:struct node { int min; int value;};struct myStack { struct node[SET]; int top; void push(node *a); node *pop();

2013-09-18 12:49:16 445

原创 1.把二元查找树转变成排序的双向链表

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。    10     / \  6   14 / \    / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{ int m_n

2013-09-18 12:31:39 564

Java实现文件读写类

Java实现对文件的读写,可设置编码格式

2013-04-12

pcre-8.12.tar.gz

pcre源码包,安装过程如下: #>tar -zxpf pcre-8.12.tar.gz #>cd pcre-8.12 #>./configure #>make #>make install

2013-04-10

libpcap-1.1.1.tar.gz

libpcap源码包,安装过程如下: #>tar –zxpf libpcap-1.1.1.tar.gz #> cd libpcap-1.1.1 #>./configure #>make #>make install

2013-04-10

sysfsutils-2.1.0.tar.gz

sysfsutils源码包,安装过程如下: #>tar –zxpf sysfsutils-2.1.0.tar.gz #>cd sysfsutils-2.1.0 #>./configure #>make #>make install

2013-04-10

bridge-utils-1.4.tar.gz

编译安装bridge-utils,安装过程如下: #tar zxvf bridge-utils-1.4.tar.gz #cd bridge-utils-1.4 #autoconf #./configure #make #make install #cp/usr/local/sbin/brctl/sbin

2013-04-10

java写的SSH连接类

使用JSch写的纯java的SSH连接类,脱离底层,可在windows,linux下运行

2013-03-25

java写的Mysql类

Java写的Mysql连接及语句执行,注释完整,简单易读

2013-03-25

Java文件读写类

Java实现对文件的读写,可设置编码格式

2013-03-25

空空如也

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

TA关注的人

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