摘要: 1. 题目:给定一个整数数组,要求输出一个数组,使新数组的第i位是原数组中除去第i位剩余数字的乘积。如输入{4,3,2,1,2},输出{12,16,24,48,24}。要求时间复杂度为:O(n),且不能使用除法运算。2. 分析:如果可以使用除法运算很容易想到的算法是将原数组中所有数字相乘,然后遍历,每次除以原数组中的第i位,即得到新数组中的第i位。但是这个算法有一个问题,要是原数组中存在一个数字为0,那么乘积自然也为0,那么新数组中的所有数字都是0,结果不对,而且除以0会导致异常。文章中给出了一个采用O(n)空间的算法,即定义数组B为原数组从左向右相乘的结果{1,4,12,24,24}(第一个 阅读全文
posted @ 2012-08-12 21:29 kasuosuo 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 1. 题目:顺时针螺旋输出二维矩阵。2. 分析:螺旋输出二维矩阵,每次剥除最外层的数据,下次再输出里面的数据。很容易想到,这个可以用递归实现,在输出一圈时,输出顺序为:topLeft-->topRight-->bottomRight-->bottomLeft-->topLeft。在递归程序中怎样计算每一个元素的下标这个是关键。3. 代码: 1 #include<iostream> 2 #include<cassert> 3 4 using namespace std; 5 6 #define ROW 5 7 #define COL 4 8 9 / 阅读全文
posted @ 2012-08-12 17:24 kasuosuo 阅读(425) 评论(0) 推荐(0) 编辑
摘要: 1. 题目:给定一个有小写字母组成的字符串,重组这个字符串,使相同字符之间的间隔至少为d。 Input:{a,b,b}, distance=2 output:{b,a,b}。2. 个人认为这道题目很有难度。初看时不知如何下手。结合文章中给出的算法,具体算法如下:主体的算法思想是“贪心算法”。出现次数最多的字符被选中放入新字符串的优先级最高,如果这个字符不能被选中(因为距离的限制,比如上次选择了字符a,这次选择如果仍然a出现次数最多,但是却不能选a,因为如果要求距离为2,再次选择a,造成两个a相邻,那距离就为1了),那么我们选择下一个优先级最高的字符(并且这个字符的出现也要满足距离的要求,如.. 阅读全文
posted @ 2012-08-12 16:57 kasuosuo 阅读(910) 评论(0) 推荐(0) 编辑