算法
__Ritchie__
这个作者很懒,什么都没留下…
展开
-
递归到动态规划的一般转化方法
递归函数有n个参数,就定义一个n维的数组,数组的下标是递归函数参数的取值范围,数组元素的值是递归函数的返回值,这样就可以从边界值开始,逐步填充数组,相当于计算递归函数值的逆过程。原创 2015-05-26 20:22:49 · 744 阅读 · 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<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-原创 2015-05-21 14:28:31 · 546 阅读 · 0 评论 -
POJ1664 放苹果
Description把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。Input第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。Output对输入的每组数据M和N,用一行输出相应的K。Sample Input17 3Sample Output8原创 2015-06-26 18:53:23 · 408 阅读 · 0 评论 -
字符串的旋转
问题描述 输入:I am a student. 输出:student. a am I算法思路 (1)首先,根据空格将原字符串分为A、B、C、D四个部分,其中A为“I“,B为“am“,C为“a“,D为“students.“。 (2)将A、B、C、D的所有字符反转,即“I“变成“I“,“am“变成“ma“,“a“变成“a“,“students.“变成“.stneduts“。原创 2016-02-25 22:07:54 · 298 阅读 · 0 评论 -
字符串包含问题
问题描述 快速判断出短字符串b中的所有字符是否都在长字符串a中?(这里假设字符串中只包含大写字母)算法思路 首先,将长字符串a映射为一个26位的二进制数,一个位置对应一个字母,如果a中存在某个字母,则该字母所对应的位置置为1,否则置为0。然后,对b中的字符依次进行查找。代码实现def match(a, b): base = ord('A') str_hash = redu原创 2016-02-26 00:31:06 · 317 阅读 · 0 评论 -
字符串全排列问题
问题描述 输入一个字符串,打印出该字符串中字符的所有排列算法思路 通过递归的方法来实现。从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列。如此递归处理。代码实现def premutation(str): length = len(str) if length == 1: return [str] array = []原创 2016-02-26 09:28:16 · 394 阅读 · 0 评论 -
字符串转换成整数
问题描述 输入一个由数字组成的字符串,输出该字符串对应的整数算法思路 从左向右依次扫描字符串中的每个字符,把之前扫面得到的数字乘以10,再加上当前字符表示的数字。 这个问题中需要注意:字符串中可能包含正负号;非法输入;对于C/C++实现,还需要考虑整数越界的问题。代码实现def str2int(str): length = len(str) if length ==原创 2016-02-26 13:54:06 · 385 阅读 · 0 评论 -
寻找和为定值的组合
问题描述 给定一个数组,找出数组中所有任意两数之和等于M的组合算法思路 可以利用hash来实现高效的查找。首先,将数组映射到哈希表里。然后,针对每个数N依次在哈希表里查找M-N。如果存在,则找到了一个满足条件的组合,否则,继续查找。这个算法的时间复杂度为O(n)O(n)代码实现原创 2016-02-29 18:30:18 · 643 阅读 · 0 评论 -
回文判断
问题描述 给定一个字符串,如何判断这个字符串是否是回文串算法思路 从字符串的两头同时往中间逐次扫描,比较两端的字符是否相同,如果有不同的就认为不是回文串代码实现def is_palindrome(string): length = len(string) for i in range(length/2): if string[i] != string[le原创 2016-02-29 18:40:30 · 408 阅读 · 0 评论