基础算法
文章平均质量分 75
快乐的霖霖
一个人默默的奋斗者
展开
-
如何判断用户输入的字符串是否是IP地址
如何判断用户输入的字符串是否是IP地址 思路:输入字符串的时候,把分隔符“.”读取出来,然后判断分隔符旁边的数字是否在0~~255之间,然后判断是否合法。 #include #include int main(void) { char str[31],temp[31]; int原创 2012-04-12 17:03:46 · 3221 阅读 · 0 评论 -
【2012百度之星资格赛】A:百度计算器的加法
【2012百度之星资格赛】A:百度计算器的加法时间限制: 1000ms 内存限制: 10000kB描述百度框计算中提供了计算器这个功能,模拟计算器中的复杂功能,我们最先需要解决的就是实现加法模块。今天就给你个机会,和百度计算器一样,计算一下十以内的加法吧。输入仅有一组数据,包含两个正整数,分别为a, b(0 输出一个正整数,暨输入a, b后对应原创 2012-06-09 22:02:26 · 929 阅读 · 0 评论 -
【编程珠玑】第一章 开篇
【编程珠玑】第一章 开篇一. 题目 如何给磁盘文件排序? 问题描述: 输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且 n=10^7。 输出:得到按从小到大升序排列的包含所有输入的整数的列表。 条件:最多有大约1MB的内存空间可用,但磁盘空间足够。且要求运行时间在5原创 2012-06-10 11:15:59 · 919 阅读 · 0 评论 -
strassen矩阵乘法
Strassen矩阵乘法简要解析Strassen矩阵乘法具体描述如下:两个n×n 阶的矩阵A与B的乘积是另一个n×n 阶矩阵C,C可表示为假如每一个C(i, j) 都用此公式计算,则计算C所需要的操作次数为n3 m+n2 (n- 1) a,其中m表示一次乘法,a 表示一次加法或减法。为了使讨论简便,假设n 是2的幂(也就是说, n是1,2,4,8,1 6,...)。首先,假原创 2012-07-02 17:17:31 · 5203 阅读 · 0 评论 -
编写一个"banner"函数,该函数的输入为大写字母
编写一个"banner"函数,该函数的输入为大写字母 题目:编写一个"banner"函数,该函数的输入为大写字母,输出为一个字符数组,该数组以图像化的方式表示该字母。《编程珠玑》上提到当要输入的数据很多,且没有规律时,可以考虑编写一个格式信函发生器(form letter generator)用于解析格式信函模板(form letter schema)。将数据从控制原创 2012-08-14 19:55:01 · 2608 阅读 · 0 评论 -
编程珠玑第三章习题5——英语中的连字符问题
编程珠玑第三章习题5——英语中的连字符问题问题:本问题将处理一小部分用连字符连接的英语单词方面的问题。下面的规则列表描述了一些以字母c结尾的单词的有效连字符连接:et-ic al-is-tic s-tic p-tic -lyt-ic ot-ic an-tic n-tic c-tic at-ic h-nic n-ic m-ic l-lic b-lic -clic l-ic h-ic f-原创 2012-08-15 19:14:57 · 1720 阅读 · 1 评论 -
c++二分查找—来自编程珠玑
c++二分查找—来自编程珠玑二分查找法(Binary search algorithm)是一个很常见的算法,从<编程珠玑>里再次看到时又有新的收获。 直接看代码吧,下面是常见的实现代码: int binary_search(int *a, int num, int t){ int start = 0, end = num - 1; whi原创 2012-08-15 21:16:39 · 1453 阅读 · 0 评论 -
在二分搜索应用于未排序的数组时加入部分检测程序—编程珠玑第五章习题5
在二分搜索应用于未排序的数组时加入部分检测程序—编程珠玑第五章习题5 大家都知道二分搜索算法应该用在已经排序好的数组中,但是有时候会犯一些错误,一个常见的错误就是把二分搜索应用于未排序的数组,而在每次搜索前检测整个数组是否有序需要进行n-1次额外的比较。 1.测试,断言优化问题 可以加入:原创 2012-08-16 16:43:17 · 2951 阅读 · 1 评论 -
算法设计艺术——编程珠玑第八章
算法设计艺术——编程珠玑第八章 下面是书本中讲解的四个算法: 问题:求一维数组中连续子向量的最大和。 例如:a[6]={3,4,-2,-9,10,8}; 则最大连续子向量的和 为 10+8 = 18 1)解法一:简单算法[html] view plaincopy#incl原创 2012-08-17 11:00:04 · 1143 阅读 · 0 评论 -
【编程珠玑】代码优化的27条经典法则
【编程珠玑】代码优化的27条经典法则我觉得这篇文章写得很好,总结性比较强,对于代码优化方面非常有帮助!!1. 空间换时间法则 1.1修改数据结构 例如:计算球面距离:输入为球面上5000个点组成的集合S,再输入20000个点组成的序列,每个点实用经度和纬度表示,对于20000个点的序列,程序必须求出S中哪个点最接近它,距离使用转载 2012-08-17 11:36:30 · 2285 阅读 · 0 评论 -
字符串旋转问题——来自编程珠玑
字符串旋转问题——来自编程珠玑 在编程珠玑这本书中对于字符串旋转有个很好的方法.思想是这样的:一个字符串如果要从中间某个位置进行旋转,例如对于字符串abcdefghijk,要从第四个位置(也就是d)进行旋转,得到defghijkabc。算法可以这样做:对abc求逆,得到cba,再对defghijk进行求逆得到kjihgfed,最后对cbakjihgfed整体进行求逆,就可以得到defg原创 2012-08-18 21:22:21 · 1093 阅读 · 0 评论 -
给定两个输入文本,找出它们共有的最长字符串
给定两个输入文本,找出它们共有的最长字符串//求两字符串的最长公共子串 #includestdio.h> #includestring.h> char * maxsamesubstring(char *s1,char *s2) { int i,j,len,maxlen,index,maxindex; m原创 2012-08-30 16:20:56 · 1472 阅读 · 0 评论 -
插入排序和快速排序的优化——编程珠玑
插入排序和快速排序的优化——编程珠玑1.插入排序方法一:#include [html] view plaincopyfor(int i=1;i5;i++) t j=i;j>0&&a[j-1]>a[j];j--) swap(a[j-1],a[j原创 2012-08-27 22:08:37 · 1311 阅读 · 0 评论 -
线性时间内从一个数组中找出第K个最小的元素——编程珠玑
线性时间内从一个数组中找出第K个最小的元素——编程珠玑题目:编写程序,在O(n)时间内从数组x[0...n-1]中找出第k个最小的元素,算法中可以对x中的元素进行排序。思路:快速排序选择一个pivot对数组进行划分,左边小于pivot,右边大于等于pivot,所以我们计算左边小于pivot(加上pivot)的个数count总共有多少,如果等于k,正是我们所要的,如果大于k,说明原创 2012-08-28 16:27:12 · 4697 阅读 · 1 评论 -
程序员面试题精选100题(07)-翻转句子中单词的顺序
程序员面试题精选100题(07)-翻转句子中单词的顺序题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试原创 2012-09-21 19:55:45 · 1077 阅读 · 0 评论 -
B 树、B+ 树、B* 树
B 树、B+ 树、B* 树B 树、B+ 树、B* 树 作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 。 第一原创 2012-10-17 11:40:30 · 2436 阅读 · 0 评论 -
堆排序算法
堆排序算法1.堆排序是利用堆的特性对记录序列进行排序的一种排序方法。好的那么堆得特性是什么呢?堆得定义:堆是满足下列性质的数列{r1, r2, …,rn}: 如下图最开始是一个小顶堆。当把97和13 交换后不是堆了,所以我们要调整根节点使之成为堆即筛选。(注意:是自堆顶到叶子的筛选过程,应该刚开始是堆由于把堆顶给换了,罪魁祸首是堆顶,其它小范围还是堆,所以是原创 2012-08-29 21:04:06 · 1017 阅读 · 0 评论 -
递归和迭代的区别
递归和迭代的区别 经常遇到递归和迭代的算法编程,有时候不是很清楚递归和迭代的区别,下面就讲解下。 //以下以一个斐波那契数列的例子说明://----------------------------------//1.迭代方法:public class Fab_iterate {public static void main(String[]原创 2012-10-18 09:22:45 · 1252 阅读 · 0 评论 -
什么是尾递归
什么是尾递归 递归大家都很熟悉,但是很多程序员有时候不是很清楚尾递归,那么什么是尾递归呢? 尾递归就是从最后开始计算, 每递归一次就算出相应的结果, 也就是说, 函数调用出现在调用者函数的尾部, 因为是尾部, 所以根本没有必要去保存任何局部变量. 直接让被调用的函数返回时越过调用者, 返回到调用者的调用者去. 以下是具体实例:线性递归:long Re原创 2012-10-18 11:13:48 · 1021 阅读 · 0 评论 -
快速排序之“采取“尾递归”和“三数取中”技术的快速排序”
快速排序之“采取“尾递归”和“三数取中”技术的快速排序” 下面针对快速排序进行一些优化。 QUICKSORT算法包含两个对其自身的递归调用,即调用PARTITION后,左边的子数组和右边的子数组分别被递归排序。QUICKSORT中的第二次递归调用并不是必须的,可以用迭代控制结构来代替它,这种技术叫做“尾递归”,大多数的编译器也使用了这项技术。最坏的情况下,就是划分不好原创 2012-10-18 11:24:49 · 2041 阅读 · 0 评论 -
POJ 1011的一道题(木棍组合)
POJ 1011的一道题(木棍组合)【题意】:乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。【随笔】:这道题很早之前就过了,这几天看回之前的代码,觉得以前的代码写得太烂了,而原创 2012-10-24 16:39:43 · 3319 阅读 · 1 评论 -
程序员面试题精选100题(34)-数组中只出现一次的数字
程序员面试题精选100题(34)-数组中只出现一次的数字题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。分析:这是一道很新颖的关于位运算的面试题。首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。原创 2012-11-25 23:50:43 · 782 阅读 · 0 评论 -
程序员面试题精选100题(35)-两链表的第一个公共结点
程序员面试题精选100题(35)-两链表的第一个公共结点题目:两个单向链表,找出它们的第一个公共结点。链表的结点定义为:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试原创 2012-11-26 09:04:52 · 710 阅读 · 0 评论 -
程序员面试题精选100题(31)-从尾到头输出链表
程序员面试题精选100题(31)-从尾到头输出链表题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};方法一:看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到原创 2012-11-25 20:40:47 · 729 阅读 · 0 评论 -
程序员面试题精选100题(33)-在O(1)时间删除链表结点
程序员面试题精选100题(33)-在O(1)时间删除链表结点题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(Lis原创 2012-11-25 21:59:00 · 719 阅读 · 0 评论 -
程序员面试题精选100题(36)-在字符串中删除特定的字符
程序员面试题精选100题(36)-在字符串中删除特定的字符题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。分析:这是一道微软面试题。在微软的常见面试题中,与字符串相关的题目占了很大的一部分,因为写程序操作字符串能很好的反映我们的编原创 2012-11-26 10:27:17 · 794 阅读 · 0 评论 -
程序员面试题精选100题(38)-输出1到最大的N位数
程序员面试题精选100题(38)-输出1到最大的N位数题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。应聘者在解决这个问题的时候,最容易想到的方法是先求出最大的n位数是什么,然后用一个循环从1开始逐个输出。很快,我们就能写出如下代码:原创 2012-11-26 14:03:37 · 872 阅读 · 0 评论 -
程序员面试题精选100题(39)-颠倒栈
程序员面试题精选100题(39)-颠倒栈题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来,放到一个数组里,然后在数组里颠倒所有元素,最后把数组中的所有元素逐一push进入栈。这时栈也就颠倒过来了。颠倒一个数组是一件很容易的原创 2012-11-26 15:14:53 · 852 阅读 · 0 评论 -
程序员面试题精选100题(40)-扑克牌的顺子
程序员面试题精选100题(40)-扑克牌的顺子 题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。 分析:这题目很有意思,是一个典型的寓教于乐的题目。 我们需要把扑克牌的背景抽象成计算机语言。不难想象,我们可以把5张牌看成由5个数原创 2012-11-26 16:18:10 · 996 阅读 · 0 评论 -
程序员面试题精选100题(41)-把数组排成最小的数
程序员面试题精选100题(41)-把数组排成最小的数题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。分析:这是09年6月份百度新鲜出炉的一道面试题,从这道题我们可以看出百度对应聘者在算法方面有很高的要求。这道题其实是希望我们原创 2012-11-27 09:16:54 · 1036 阅读 · 0 评论 -
程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表
程序员面试题精选100题(01)-把二元查找树转变成排序的双向链表参见博客:http://zhedahht.blog.163.com/blog/static/254111742007127104759245/http://www.cnblogs.com/caidaxia/archive/2011/10/14/2212369.html题目:输入一棵二元查找原创 2012-11-12 20:39:32 · 1059 阅读 · 0 评论 -
程序员面试题精选100题(02)-包含main函数的栈
程序员面试题精选100题(02)-包含main函数的栈问题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。分析:使用链栈和顺序栈的push,pop的时间复杂度都是o(1),要求min的时间复杂度为o(1),高级数据结构的斐波那契堆就是通过一个指向最小元素的指针来实现min函数的,并保证了其时间复杂度为原创 2012-11-12 21:16:57 · 818 阅读 · 0 评论 -
程序员面试题精选100题(04)-二元树中和为某一值的所有路径
程序员面试题精选100题(04)-二元树中和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10原创 2012-11-12 22:02:53 · 718 阅读 · 0 评论 -
程序员面试题精选100题(43)-n个骰子的点数
程序员面试题精选100题(43)-n个骰子的点数题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。分析:玩过麻将的都知道,骰子一共6个面,每个面上都有一个点数,对应的数字是1到 6之间的一个数字。所以,n个骰子的点数和的最小值为n,最大值为6n。因此,一个直观的思路就是定义一个长度为6n-n的数组,和为S的点数出现的次数原创 2012-11-27 20:57:24 · 1026 阅读 · 0 评论 -
程序员面试题精选100题(42)-旋转数组的最小元素
程序员面试题精选100题(42)-旋转数组的最小元素题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。 分析:这道题最直观的解法并不难。从头到尾遍历数组一次,就能找出最小的元素原创 2012-11-27 19:14:20 · 1088 阅读 · 0 评论 -
程序员面试题精选100题(44)-数值的整数次方
程序员面试题精选100题(44)-数值的整数次方题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。方法一:由于输入的exponent是个int型的数值,因此可能为正数,也可能是负数。见下面代码:bool g_InvalidInput=false;double Power(d原创 2012-11-28 15:13:32 · 928 阅读 · 0 评论 -
程序员面试题精选100题(46)-对称子字符串的最大长度
程序员面试题精选100题(46)-对称子字符串的最大长度题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。引子:判断字符串是否对称要判断一个字符串是不是对称的,不是一件原创 2012-11-29 21:21:41 · 1688 阅读 · 2 评论 -
程序员面试题精选100题(47)-数组中出现次数超过一半的数字
程序员面试题精选100题(47)-数组中出现次数超过一半的数字题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。看到这道题,我们马上就会想到,要是这个数组是排序原创 2012-11-30 11:08:40 · 789 阅读 · 0 评论 -
Trie树详解及其应用
Trie树详解及其应用一、知识简介 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强大之处就在于它的时间复杂度。它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 Trie 中保存了多少个元素无关原创 2012-11-30 23:13:54 · 968 阅读 · 0 评论 -
程序员面试题精选100题(48)-二叉树两结点的最低共同父结点
程序员面试题精选100题(48)-二叉树两结点的最低共同父结点题目:二叉树的结点定义如下:struct TreeNode{ int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。分析:求数中原创 2012-12-01 10:48:35 · 957 阅读 · 0 评论