code
happylife1527
这个作者很懒,什么都没留下…
展开
-
大整数乘法 1 复杂度分析
http://www.cnblogs.com/titer1/archive/2012/04/13/2445422.html题目:设X和Y都是n位的十进制整数,计算它们的乘积XY。分析:我们可以用小学所学的方法来设计一个计算乘积XY的算法,但是这样做计算步骤太多,显得效率较低。如果将每2个1位数的乘法或加法看作一步运算,那么这种方法要作O(n2)步运算才能求出乘积XY。下面我们用转载 2012-09-07 22:44:21 · 3255 阅读 · 0 评论 -
划分问题
http://www.cnblogs.com/hustcat/archive/2009/06/16/1504604.html#include stdio.h>/*******************************************************************//*整数划分问题:**将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,*转载 2012-09-05 22:22:28 · 303 阅读 · 0 评论 -
把数组排成最小的数
【题 目】输入一个正整数数组,将他们连接起来排成一个数,输出所有排出的数字中最小的一个。例如:输入数组『32,321』,输出所能排出的最小数为:32132.请给出该问题的算法。 【思 路】我们希望能够找到一种规则,按照这种规则排列出来的数是最小的数。要确定排序的规则,我们就必须知道,对于任意两个正整数a和b,如果确定一个规则,使得按照该问题进行排序能得到最小的数,也就是要比较a和b的值,转载 2012-08-27 15:20:25 · 368 阅读 · 0 评论 -
递归算法的时间复杂度终结篇
开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治思想缩小问题规模的算法,如何求解这个算法的时间复杂度呢?在google过很多的博文后,感觉这些博文总结的方法,有很好优秀的地方,但是都不够全面,有感于此,笔者决定总结各家之长,作此博文,总结各种方法于转载 2012-08-27 15:12:59 · 758 阅读 · 0 评论 -
时间为O(n)排序——计数排序
【题 目】某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄进行排序,可以使用O(1)的辅助空间。 【思 路】在数据结构和算法的学习中,排序肯定是重中之重,然而仔细回想我们学习过的排序算法,无论是冒泡排序,归并排序,插入排序,希尔排序,甚至著名的快速排序,时间复杂度都达不到O(n),这些算法的时间复杂度要么为O(n2),要么为O(nlogn),然而这道题却要求我们用转载 2012-08-27 12:44:27 · 1709 阅读 · 0 评论 -
在升序数组中查找和等于给定值的两个数
【题 目】输入一个已经按升序排列的数组,一个给定的数字,在数组中查找两个数,使得它们的和等于给定的数字。要求时间复杂度为O(n),如果存在多对满足条件的数字对,只给出一对即可。例如:输入数组『1,2,4,7,11,15』,给定一个数字15,那么输出应该为『4,11』. 【思路1】我们先不考虑时间复杂度为O(n),按照最直观的思路来考虑,容易想到,我们一次固定数组中的一个数字,然后遍历这个转载 2012-08-27 12:34:21 · 1177 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整型数组,数组里面有正数也有负数,数组中的连续一个或者多个整数组成一个子数组,每一个子数组都有一个和,求所有子数组和的最大值。要求时间复杂度为O(n)。 例如:输入数组为{1,-2,3,10,-4,7,2,-5},和的最大子数组为{3,10,-4,7,2},因此输出为子数组的和18。 分析1:一般地,对于在整体集合内寻找满足某一条件子集合问题,最直观也最后理解的方法转载 2012-08-27 11:32:54 · 381 阅读 · 0 评论 -
左旋转字符串
题目:字符串的左旋转操作:把字符串前面的若干字符移到字符串的后面。例如:字符串abcdefg左旋转2位得到cdefgab。请实现左旋转字符串函数,要求对于长度为n的字符串,时间复杂度为O(n),辅助内存为O(1)。分析1:看到这道题我们最直观的思路就是:如果要把长度为n的字符串左移k位,那么我们可以动态分配长度为k的临时数组,存储前面k个字符,然后将后面的字符逐一向前移动k位,然后将临时数组中转载 2012-08-27 11:29:20 · 363 阅读 · 0 评论 -
寻找丑数
原文:http://www.cnblogs.com/python27/archive/2011/11/24/2261550.html题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。 分析:寻找一个数是不是满足某种数(质数,水仙数)等,最简单的方法转载 2012-08-27 11:08:17 · 408 阅读 · 0 评论 -
3种方法求解斐波那契数列
题目:定义Fibonacci数列如下:分析1:看到斐波那契数列几乎所有的程序员在第一时间的反应都是“递归”,没错了,作为和汉诺塔一样的经典递归问题,我们几乎毫不犹豫就可以写出如下的代码: 1 #include 2 #includestring> 3 using namespace std; 4 5 long Fibonacci(unsigned int n)转载 2012-08-27 11:00:55 · 1076 阅读 · 0 评论 -
[转]B+树的结构和实现代码
http://blog.csdn.net/hejishan/article/details/2249431转载 2012-08-26 22:53:10 · 332 阅读 · 0 评论 -
[转]B+树的结构和实现代码
B+树实现代码来源:http://supercyber.139.com/article/253784.htmlhttp://blog.csdn.net/hejishan/article/details/2249431转载 2012-08-26 22:52:44 · 521 阅读 · 0 评论 -
拓扑排序_TopologicalSort
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXEDGE 20#define转载 2012-09-04 23:12:26 · 1004 阅读 · 0 评论 -
一道算法题:(背包,贪心,动态规划)
import java.util.Scanner; /** * 【题目描述】 * xn 的朋友 kelly 快要过生日了,他想买一件礼物送给 kelly ,现在他手上有面值 * 1元、5元、10元、20元、50元、100元的钞票若干,但不幸的是收银员没有足够的现金 * 用来找钱。xn 能不能用他手上的钱凑出与他想要的礼物价值一样的面值出来呢。 * * 【输入】 * 输入第一行转载 2012-09-04 22:42:29 · 491 阅读 · 0 评论 -
最小生成树_Kruskal
http://www.cnblogs.com/ly772696417/archive/2012/03/19/2407172.html#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define E转载 2012-08-24 17:33:35 · 399 阅读 · 0 评论 -
B树_BTree
#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储转载 2012-08-24 17:32:05 · 1363 阅读 · 0 评论 -
Palindrome
输出回文:#include//recursionvoid Print(){ char a; scanf("%c",&a); if(a != '#') Print(); if(a != '#') printf("%c",a);}int main(){ printf("Please enter the转载 2012-09-05 22:39:29 · 344 阅读 · 0 评论 -
Fibonacci sequence of k order
The Fibonacci Number that are defined recursively as below: f0=0 , f1=0 , …, fk-2=0 , fk-1=1, fn = fn-1 + fn-2 +…+ fn-k (n=k,k+1,…)Please write a program that lists n+1 items of Fibonacci转载 2012-09-05 22:39:42 · 523 阅读 · 0 评论 -
第一个只出现一次的字符
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。分析:这道题是2006年google的一道笔试题。看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂转载 2012-08-28 10:49:24 · 282 阅读 · 0 评论 -
翻转句子中单词的顺序[算法]
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。分析:由于编写字符串相关代码能够反映程序员的编程能力和编程习惯,与字符串相关的问题一直是程序员笔试、面试题的热门题目。本题也曾多次受到包括微软在内的大量公司的青睐。由于转载 2012-08-28 10:45:58 · 426 阅读 · 0 评论 -
求1+2+...+n[C/C++/C#]
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)。分析:这道题没有多少实际意义,因为在软件开发中不会有这么变态的限制。但这道题却能有效地考查发散思维能力,而发散思维能力能反映出对编程相关技术理解的深刻程度。通常求1+2+…+n除了用公式n(n+1)/2之外,无外乎循环和递归两种思路。由于已经明确限制转载 2012-08-28 10:41:27 · 513 阅读 · 0 评论 -
含有指针成员的类的拷贝[C/C++/C#]
题目:下面是一个数组类的声明与实现。请分析这个类有什么问题,并针对存在的问题提出几种解决方案。templatetypename T>class Array{public: Array(unsigned arraySize):data(0), size(arraySize) { if(size > 0)转载 2012-08-28 08:52:24 · 310 阅读 · 0 评论 -
最大子段和——分治与动态规划
问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1 例如,当(a1,a2,a3,a4,a4,a6)=(-2,11,-4,13,-5,-2)时,转载 2012-09-05 14:03:04 · 587 阅读 · 0 评论 -
组合问题
组合的实现: 1.回溯实现回溯法实现从1~n这n个数中每次取m个数的组合,设置a数组,i从1开始取值,a(1)从1开始到n取值。约定a(1),...,a(i),...,a(m)按升序排列,a(i)后有m-i个大于a(i)的元素,其中最大取值为n,显然a(i)最多取n-m+i,即a(i)回溯的条件是a(i)=n-m+i。当i当a(i)=n-m+i时,i--回溯,直到i=0时结束。转载 2012-09-05 13:43:04 · 310 阅读 · 0 评论 -
字符串的全排列
【题 目】输入一个字符串,打印该字符串的所有排列。例如输入字符串abc,输出其全排列为abc,acb,bac,bca,cab,cba。 【思 路】我们想一下,如果不编程,手工做的话,我们的基本考虑是:每次首先固定一个字母,然后让其余的字母全排列;然后换一个字母固定,再全排列其余的字母,如此循环而已。换句话说:假设长度为n的字符串排列方式是f(n),那么我们的基本思路是:每次让n个字母中的一转载 2012-08-27 15:07:41 · 726 阅读 · 0 评论 -
跳台阶问题
【题 目】一个台阶一共有n阶,一次起跳可以跳一阶,也可以跳二阶。问总共有多少中跳法,并对时间复杂度进行分析。【思 路】由特殊到一般的思路吧,如果只有一阶,那么只有一种跳法;如果有2阶,那么有2中跳法(跳1阶再跳1阶,一次跳2阶);那么如果有n阶呢?假设对于n阶的阶梯,我们有f(n)中跳法;那么n阶时,我们考虑如果第一次跳共有两种选择:第一次跳了1阶,剩下n-1阶有f(n-1)种跳法;第一次跳了转载 2012-08-27 12:45:35 · 514 阅读 · 0 评论 -
和为n的连续正数序列
【题 目】输入一个整数,输出所有和为n的连续正数序列。例如:输入15,由于15=7+8=4+5+6=1+2+3+4+5,所以输出的序列为『1,2,3,4,5』;『4,5,6』,『7,8』三个。 【思路1】从等差数列的观点考虑:如果有一列数满足i+(i+1)+...+j=n,根据等差数列的求和公式,我们容易得到:(i+j)(j-i+1)/2=n,即(i+j)(j-i+1)=2n,由于i,j均转载 2012-08-27 12:37:19 · 1175 阅读 · 0 评论 -
整数的转换成2进制有多少个1
题目:输入一个整数,判断该正数的二进制表示中有多少个1?例如:输入整数12,转换成二进制是1100,共有2个1,因而应该输出2. 分析1:我们可以这样考虑,从右向左注意判断每一个位上是否为1,怎么判断?我们让这个数和整数1(01)做与运算,由于1除最后一位外其余部分全部都是0,因而如果整数的最后一位是1,则返回结果为1,如果整数的最后1为是0,则返回结果为0;接着,我们让该整数与2(1转载 2012-08-27 12:30:28 · 750 阅读 · 0 评论 -
数对之差的最大值
题目:数组中,数字减去它右边(不要求相邻)的数字得到一个数对之差。求所有数对之差的最大值。例如:数组{2, 4, 1, 16, 7, 5, 11, 9},数对之差的最大值是11,是16-5的结果。 分析1:这道题我们同样可以用遍历的方法,固定一个数字,然后逐一减去它右边的数字,得到各个数对之差,然后比较选出最大值;对于数列中的每一个数字做如此操作,然后去所有最大值的最大值。然而和所有枚转载 2012-08-27 12:26:06 · 774 阅读 · 0 评论 -
顺时针打印矩阵
题目:给定一个矩阵,从外向内顺时针打印矩阵中的每一个数字。例如:给定矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出应该为:{1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10} 分析:这道题的意思非常直观,给人的感觉也是so easy,然而实际去做的转载 2012-08-27 11:31:56 · 477 阅读 · 0 评论 -
判断扑克牌中的顺子
题目:随机抽取扑克牌中的5张牌,判断是不是顺子,即这5张牌是不是连续的。其中A看成1,J看成11,Q看成12,K看成13,大小王可以看成任何需要的数字。分析1:这道题的意思很明确,我们玩扑克的过程中,也经常碰到这样的情况。我们先看看在现实生活中,我们是怎么样处理的,我想大部分人都是这样做的:先把5张牌从小到大进行排序,然后直接判断。而如果碰到大小王,我们会除去大小王之后排序,然后判断不相邻的两转载 2012-08-27 11:28:39 · 1185 阅读 · 1 评论 -
n个骰子的总和
题目:把n个骰子仍在地上,所有骰子的点数和为s。输入n,打印s所有可能取值的概率。分析1:容易知道,有n个骰子的话,s的最小取值为n(全为1),最大取值为6n(全为6)。如果只有1个骰子,那么很简单,s取1,2,3,4,5,6的情况数均为1,概率为1/6;设想有n个骰子,出现和为s,我们可以这样考虑,如果第一个骰子有6中情况,取1,2,3,4,5,6;那么剩下的n-1个骰子的和则分别取s-转载 2012-08-27 11:19:02 · 1397 阅读 · 1 评论 -
回溯法:输出n的全排列,解哈密顿问题,马的遍历问题,解八后问题
回溯法:输出n的全排列2012-07-15 20:09 by 有心故我在, 4 阅读, 0 评论,收藏,编辑1. 问题描述: 输出自然数1到n的所有不重复的排列,即n的全排列。2. 问题分析: (1) 解空间: n的全排列是一组n元一维向量(x1, x2, x3, ... , xn),搜索空间是:1(2) 约束条件: xi互不相同。技巧:采用"数组记录状态信转载 2012-08-29 22:02:10 · 1480 阅读 · 0 评论 -
判断点是否在多边形内(包括在多边形上)
判断点是否在多边形内(包括在多边形上) /** 检查某点是否包含在多边形的范围内(只用与判断在多边形内部,不包含点在多边形边上的情况)~ */- (BOOL) checkPointWithinPolygon:(PolyVerticesWrapper*)pvw point:(b2Vec2)point { int verticesCount = [pvw verti转载 2012-09-03 22:23:46 · 1465 阅读 · 0 评论 -
贪心经典-地图中最短路径
贪心经典-地图中最短路径#include iostream>#include algorithm>#include vector>#include iomanip>using namespace std;//引以为荣的程序.还有几个小部分改,以待完美.const int N=7,MAX=1000;class PrimTree{转载 2012-09-03 22:19:53 · 564 阅读 · 0 评论 -
Josephus Ring(链表)
#include#includetypedef struct node{ int number; int psw; struct node *next;}LNode,*LinkList;int main(){ void createJoseph(LNode *,int); void exJoseph(LNode *,转载 2012-08-31 23:04:55 · 381 阅读 · 0 评论 -
幂函数的实现
【题 目】实现函数double Power(double base,int exponent),求base的exponent次方,不需要考虑溢出。【思 路】这道题的核心太简单了,一个循环就搞定,就不在多说了。关键是我们要考虑代码的健壮性:(1)首先base=0,exponent=0在数学上是无意义的;base=0,exponent 这样我们就可以得到如下的代码: 1 #i转载 2012-08-31 23:04:19 · 785 阅读 · 0 评论 -
Singly Linked List(链表)
Create a singly linked list with a dummy node according to the input linear list, and complete the following functions.(1) insert a new node after the specified position insert(i, value)(2) delete转载 2012-08-31 23:09:28 · 568 阅读 · 0 评论 -
重排数组元素使得所有的奇数位于所有偶数之前
【题 目】输入一个整型的数组,调整数组的数字,使得所有的奇数位于数组的前半部分,所有的偶数都位于数组的后半部分。要求时间复杂度为O(n)。 【思 路1】首先我们不考虑时间复杂度的要求,直观考虑:我们只需要从头到尾扫描整个数组,如果碰到奇数,放到第一的位置;如果碰到偶数,就放到最后的位置。这样就OK了。然后我们来分析这种算法的效率问题:首先我们需要一个临时变量来保存需要移动的元素,因而空间复转载 2012-08-31 23:05:56 · 705 阅读 · 0 评论 -
设计包含min函数的栈[数据结构]
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。分析:这是去年google的一道面试题。我看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。在栈里添加一个成员变量存放转载 2012-08-31 23:05:37 · 345 阅读 · 0 评论