2012年9月20日

字符全排列

摘要: 题目描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。解析:递归法:首先看最后两个字符b, c。 它们的全排列为b c和c b, 即以b开头的c的全排列和以c开头的b的全排列。再看三个字符a,b,c。他们的全排列(a,b,c)、(a,c,b)、(b,a,c)、(b,c,a)、(c,a,b)、(c,b,a)从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。因此perm(p) = r1perm(p1), 阅读全文

posted @ 2012-09-20 15:43 as_ 阅读(1128) 评论(0) 推荐(0) 编辑

时间复杂度O(n),空间复杂度O(1)的排序

摘要: 题目描述:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)解析:利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,然后遍历n个数,假设这n个数在数组array[0...n-1]中,则i取值从0到n-1同时执行a[array[i]]++,最后再依照顺序读数组a,遇到不为0时,将对应的下标读回数组array,计数是几次就读几次,覆盖原有数,这样得出的array即为排序所求因为空间复杂度大小已知,为65536,执行循环次数约为n+65536 ,所以其空间复杂度为O(n),空间复杂度O(1),代码略 阅读全文

posted @ 2012-09-20 10:09 as_ 阅读(4454) 评论(0) 推荐(0) 编辑

导航