自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

心有林夕

魔鬼与天使同在

  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 【题目29】一些简单的算法练习题(3)

Problem 1. 一个完全二叉树有386个叶子节点,问它总共有多少个叶子节点。分析:      386个叶子节点,那么它的上层可以确定的非叶子节点有多少个呢?可以用试探法得到,它上面应该有7层,即非叶子节点数应该有2^8 - 1 = 255个。       根据总的叶子节点数,可以知道第8层一定有叶子节点,可以设第8层非叶子节点数为x, 叶子节点数为y. 则得到一个方程

2009-09-30 02:11:00 838

原创 【题目28】一些简单题的算法练习题(2)

声明:这些题目都是从互联网上搜集而来,有些解法属于原创,有些解法属于网友的智慧,从博客上找来的解法都会给出链接,论坛上的讨论就不给出链接了。 1. 不用中间变量,实现strlen函数。(strlen为C语言中求给字符串长度库函数) int strlen(const char *str) 解法比较明显,不让用临时变量,那就用递归了。int strlen(const char

2009-09-29 10:47:00 1200 5

原创 【题目27】求两个排序数组的交集

注:此题来源于CSDN论坛,解法也是来源于论坛上的讨论,非原创,特此声明题目: 有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},如何求出他们之间的交集?要求效率越高越好,数组都是从小到大排序好的。 此题解法的详细说明可以参考侯捷的《STL源码剖析》书中第333页。此解法与论坛上说给出的解法相同。C++

2009-09-29 10:05:00 1135

原创 【题目26】关于1-N的整数查找排序问题

题目:此题缘于《编程珠玑》,一个文件包含最多N个正整数,每一个都小于N,每一个数都不会出现两次以上。将这个文件排序。 珠玑上的解法:/*phase 1: initialize set to empty*/for  i = [0, n)    bit[i] = 0/*phase 2: insert present elements into the set*/fo

2009-09-28 20:07:00 805

原创 【题目25】求一个无序数组的第nth大的数

分析: 可以利用跟快排一样的分割法,分到最后的结果是Nth左边的数小于Nth,右边的数大于Nth的值。 实现原理:假设求第3th,也就第四个数2  4 15  6 9 12 20             ->第一次划分结果:2  4  6      15 9 12 20     left   | -> right第二次划分结果:2 4 6    9     

2009-09-26 11:27:00 908

原创 【题目24】大数乘法

声明: 此解法搜索自互联网,非原创,欲了解详细请参考http://www.cnblogs.com/hoodlum1980/archive/2007/08/15/857067.html 这道题也是一道经常考的题目,解法其实很简单,利用三个整形数组,两个数组A和B分别存储两个字符串对应的每一位数字,数组C存储A和B两个数组的乘积。计算方法:C[i+j] += A[i] *B[j];

2009-09-22 23:28:00 737 2

原创 P&G经典8问

    前言:这是P&G的8个经典面试问题,经人推荐,仔细看了下,这几个问题真的把我难住了,这几个问题不仅仅是我们现在要面对的,也是我们将来要面对的问题。能对这几个问题做一份很好的答卷,你的人生肯定是精彩的,成功的。所以抄录于此,时不时回头问问自己,面对这样一份试卷,你该如何去做才能交出一份满意的答案。      1. Describe an instance where

2009-09-20 22:43:00 1388

原创 【题目23】找出二叉树上任意两个结点的最近共同父结点

题目:设计一个算法,找出二叉树上任意两个结点的最近共同父结点。复杂度如果是O(n2)则不得分。(注:微软面试题) 分析:与宿舍一大牛讨论而来,看来自己对递归的方法还是没怎么掌握好呀。 核心代码:struct TreeNode{ TreeNode* left; TreeNode* right; int value;};typedef struct T

2009-09-20 02:29:00 3924 3

转载 常用英语100句

      1. How are you doing?(你好吗?)   2. Im doing great.(我过得很好。) 这些都是我掏的,  3. Whats up?(出什么事了/你在忙些什么/怎么了?)   4. Nothing special.(没什么特别的。) 希望对大家又帮助啊  5. Hi. Long time no see.(嗨,好久不见了。)   6. So far so g

2009-09-20 01:12:00 693

原创 【题目22】传说中的微软面试题一道(简单题)

题目:一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。复杂度最好是O(n),如果是O(n2)则不得分。 分析:典型的空间换时间,用哈希表的办法来映射这个整数数列的数,哈希表中的数是按序排列的所以可以在0(N)时间内获得和为N+1的数。 源代码:#i

2009-09-19 22:24:00 921

原创 【题目21】判断一个数是否为素数

1. 判断一个数是否为素数,根据素数的定义来求解bool IsPrime(int n){ if(n < 1) return false; for(int i = 2; i < n; i++) if( n%i == 0) return false; return true;} 2. 根据下面这条定理来求解定理: 如果n不是素数, 则n有满足1bool

2009-09-19 20:17:00 925

原创 【题目20】层序遍历一个棵二叉树

题目:怎样从顶部开始逐层打印二叉树结点数据?请编程。分析:可以利用队列的先进先出的特性,逐次打印队列中的节点。                           45                    21            65               10    24      50   70层序遍历的结果: 45,21,65,10,24,50,70首先4

2009-09-19 15:34:00 899 2

原创 【题目19】一些简单的算法练习题(1)

1. 比较两个字符串,用O(n)时间和恒量空间。 源代码: #include #include int compare(const char *s1, const char *s2){ assert(s1 != NULL && s2 != NULL); const char *p = s1; const char *q = s2; while( *p !

2009-09-19 13:46:00 1037 1

原创 人生四大幸事

    最近都在准备找工作,闲来无事或看书看累了,就看看电视剧《铁齿铜牙纪晓岚》,看到其中一集,乾隆说到人生四大幸事,让纪晓岚和和珅在前面两句中各加两个字,让大喜变为大悲。觉得挺有意思的,文字游戏嘛,娱乐一下。     久旱逢甘霖,     他乡遇故知。     洞房花烛夜,     金榜题名时。 和珅改的,在前面各加了两字:     百年久旱逢甘霖, 

2009-09-18 18:53:00 7028 4

转载 【题目17】字符串的“无重复”全排列非递归算法

转载自:http://blog.csdn.net/roynee/archive/2009/06/28/4304796.aspx [问题描述]: 输出字符串的所有全排列,要求无重复字符串出现 [问题解决]:改算法的思想是从字符串排列的最小字符串出发,找到小一个比该字符串大的数据。              先对字符串排序,得到最小的排列串,然后              从字符串

2009-09-18 16:56:00 1722

转载 【题目15】求字符串的最长重复子串

转载自:http://blog.csdn.net/roynee/archive/2009/07/02/4314791.aspx 利用  “后缀数组”(需排序)  求字符串中存在的最长的重复子串,要建立指针数组并通过qsort排序 时间复杂度是O(nlogn)主要开销在于排序的过程。#define MAXSIZE 100#include #include #include

2009-09-18 12:13:00 881

原创 【题目14】求两个字符串的最大相同字串

分析:用最暴力的方法穷举出来,这个复杂度高。#include #include #include char* MaxSubStr(const char* str1, const char* str2){ int len1 = strlen(str1); int len2 = strlen(str2); int maxlen = 0; int index =

2009-09-18 09:19:00 1187

原创 【题目13】判断一个链表是否存在环

解题思路: 网上最经典的解法,追击法。设立两个指针,一个指针p加1一个指针q加2,往链表末端移动。如果q==null,则说明链表没有环,如果p==q,则说明链表存在环。 核心算法:bool HasCycle(Node* head){ Node* p = head; Node* q = head; while(true) { p = p->next;

2009-09-17 20:56:00 1167 1

原创 【题目12】用C语言实现memmove函数

题目:用C 语言实现函数void * memmove(void *dest,const void *src,size_t n)。memmove 函数的功能是拷贝src 所指的内存内容前n 个字节到dest 所指的地址上。  解题思路:又是百度的一道笔试题,貌似也没什么难度,只是要注按字节拷贝时指针类型的转换。这些基本的函数,在Linux源代码中都可以找到,可以对照一下那里的实现,看我们

2009-09-17 18:53:00 3650 7

原创 【题目11】字符串原地反转

解题思路: 这是百度的一道笔试题,这应该算是百度笔试题中相对简单的一道了。解决的方法也很简单,直接交换字符串两端的字符,直到到达中间位置。 源代码:(VC6下通过测试)#include #include #include char* RevertString(char *str){ char c; int len = strlen(str); for

2009-09-17 18:16:00 2291 1

原创 【题目10】基本的排序算法

解题思路:排序算法有很多种,插入排序,冒泡排序,希尔排序(ShellSort),快速排序,堆排序,归并排序,基排序等。作为一名软件开发人员,需要能够自己动手实现这些算法,掌握这些算法的思想,以及这些算法的时间复杂度,空间复杂度。虽然很时候,在实际的工作中,有库函数可以提供给我们使用,但是我们不仅要知其然更要知其所以然,掌握了它了,或许以后你的程序需要优化的时候会派的上用场呢。 

2009-09-17 10:10:00 720 1

原创 【题目9】一些简单的查找交换等算法

解题思路:本文章主要练习一些常用的简单的查找算法二分查找,查找最大值,最小值,以及交换算法。 1. 二分查找:输入一个有序的数组,查找某一指定的数。这里以整数为例。#include int BinarySearch(int *a,int len,int value){ int low = 0; int high = len - 1; while(low <= h

2009-09-17 09:21:00 597

原创 【题目8】查找单链表倒数第K个元素

解题思路:这个题目还是比较简单的,用到一个非常简单的方法就可以在0(n)时间内找到这个值。具体的方案是一趟遍历,设立一个临时指针pointer(初始值为第一个元素位置)和一个遍历的统计个数(count = 0),遍历元素到达K个后,临时指针指向第K+1个元素的位置,count清零,重新计数,继续遍历K个元素,直到达到链表尾。这里有两种情况:1.遍历完后,count刚好为K,po

2009-09-16 13:05:00 1406

原创 【题目7】逆转一个单链表

解题思路:网上有很多解决方案,这里介绍一种比较简单的,好理解的吧。当前节点:cur = NULL; 上一个节点:last = NULL;头节点: head开始时: 4---->3----->2---->1            -> head头指针往前移动:             42---->1                   ->           

2009-09-16 12:49:00 1007 2

原创 【题目6】如何设计一个可以获取最小值的栈

解题思路:解题的关键是用一个链表结构来存储当前栈中元素最小值的索引,每压入一个元素,该元素与链表中记录的当前最小元素索引指向的元素比较,如果小于最小值,将压入元素的索引存入链表中,否则,将原先最小值的索引继续存储在链表中。举个例子:栈: 8, 3 , 5, 10, 1最小元素索引:        0     1     1      1     5弹出一个元素后:

2009-09-16 11:16:00 755

原创 【题目5】如何使用两个栈来实现一个队列

解题思路: 栈的特性: 先进后出                 队列的特性: 先进先出如何用两个栈来实现一个队列呢,我们可以用一个栈专门用来入队,一个栈用来出队。 源代码:(在VC6下通过编译,正确执行)#include #include #include #include class SQueue{public: void  EnQueue(int value)

2009-09-16 10:21:00 1427

原创 【题目4】如何自己实现C函数strstr()

解题思路: 这个网络上已经有很多答案,这里列举一个复杂度为0(m*n)的例子。实现的原理很简单,顺序遍历要查找的字符串,如果没有找到,字符串指针往前一位,再往后比较要查找的字符串(模式串),如下图所示:a b c d  d  d a d a c a b d a d d d a d c k              ->            d a d a ch

2009-09-16 09:10:00 1499 1

原创 【题目3】打印二叉树

解题思路: 这是一个很经典的题目,几乎所有的数据结构的书上都可以看到这个问题的解答,这里参考了《数据结构与算法分析---C语言描述》中的描述方式。 打印一颗二叉树最好的方法还是采用递归的方式,其实解决树和图的最基本方法也是递归,递归有时候会把我们的脑袋转晕了,按照上面那本书中的说法,练习递归的最好方法就是多看好的递归的例子,然后自己动手去解决一些经典的例子。 源代码

2009-09-15 20:13:00 1284 1

原创 【题目2】给定一个字符串数组,从中找出第一个只出现一次的字母

    这个题目看似简单,把代码调试通过花了我两个多小时唉,越做对自己越没信心,看来要再把数据结构复习一遍了。    解题思路:利用哈希表,因为字符最多只有255个,可以利用这个特性建立一个哈希表,将字符串中所有的字符映射到这个哈希表中,记录出现的每个字符的个数。最后查找哈希表获取第一个出现字数为一的字母。  这里有一个问题,我们如何知道我们取到的是字符串中的第一个出现

2009-09-15 19:04:00 6220 7

原创 【题目1】给一个整型数组,求最大子序列和

马上要开始找工作了,做些题目练练手。源代码:(在VC6下通过编译,正确执行)#include int FindGreatestSecSum(int *a,int len){ int sum = 0, max = 0; for(int i = 0; i < len; i++) { if(sum <= 0)

2009-09-15 18:59:00 1739

php程序设计PDF中文版

PHP是最流行的Web脚本语言之一,它运行在Web服务器端,根据用户请求或服务器端的数据产生动态网页;它功能强大,和HTML脚本融合在一起,并内建访问数据库的能力;它能够作为Apache Web 服务器的模块执行,也使得其执行效率要高于普通的CGI程序

2010-04-05

空空如也

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

TA关注的人

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