| ||||
| Pora的解法和我说的是一回事... 其实可以用一个2n-bit的向量表示2n个元素是否已经包含在某个环里,查找下一个环时从当前位置查找2n-bit的向量,整个过程也是O(n)时间复杂度,不过就是空间复杂度违背题意。 现在还有一种想法是: 1.把A中的a1,a2,...,an翻转,得到A=[an,a(n-1),...,a2,a1,b1,b2,....,b(n-1),bn]; 2.取最开头的两个元素和最末尾的两个元素,交换an和b(n-1),得到A=[b(n-1),a(n-1),A',a(n),b(n)],交换a(n-1),b(n-1)得到A=[a(n-1),b(n-1),A',a(n),b(n)] 3.递归对A'作第二步所示的处理,最终可以的到A=a(n-1),b(n-1),a(n-3),b(n-3)....a(n-2),b(n-2),a(n),b(n)。这时其实可以将问题转换为一个特殊的in-place merge问题。设ab =a ,b ;假设此时n为偶数,如果要将A转换为最终形态,需要将A=[ab(n-1)ab(n-3)....ab(1)],[ab(2),ab(4),...,ab(n-2),ab(n)] merge为A=ab(1),ab(2),....,ab(n)。现在的情况是好像没有O(n)的in-place merge算法,不过这里是个特殊情况,不知道可不可以简化一下 |
| |||
| 这题的关键是数组中元素位置变化前后的关系。 令输入数组N为{d0,d1,...dn-1} 对于偏移 k ∈ [0, n), 定义f为: f = 2k when k∈ [0, n/2)f = 2(k - n/2) + 1 when k ∈ [n/2, n)例如: N: 1,3,5,2,4,6 k: 0,1,2,3,4,5 对于位置1的元素3, 转换后的位置为f(1) = 1 * 2 = 2 对于位置3的元素2, 转换后的位置为f(3) = 2 * ( 3 - 6/2) + 1 =1 剩下的就是根据公式写程序,这里用N[1]这个位置作为交换空间,k存储N[1]中元素的原始位置 代码:
此帖于 2008-04-25 11:59 PM 被 mice123 编辑. |
| ||||
| 我给一个交换策略,但是算法复杂度为O(n^2) 思路是: 第一步,交换,n和n+1位置上的元素,也就是an和b1,序列变为a1,a2,...,b1,an,b2,...,bn 第二步,交换,n-1和n, n+1和n+2,序列变为a1,a2,...,an-1,b1,b2,an,...,bn ... 第i步,交换,(n-i,n-i+1), (n-i+2, n-i+3),...,(n+i-1, n+i)位置。 程序如下: 代码:
chen@chen-PC /cygdrive/d/liuxinyu/temp/c++ $ g++ main.cpp chen@chen-PC /cygdrive/d/liuxinyu/temp/c++ $ ./a 1,3,5,7,9,2,4,6,8,10, 1,2,3,4,5,6,7,8,9,10, 这里显然有冗余交换。所以时间复杂度才没有达到O(n),但是交换策略非常一致。 此帖于 2008-04-26 11:04 PM 被 liuxinyu 编辑. |
![]() |
| 书签 |
| 主题工具 | |
| 显示模式 | |
| |
LinkBacks (?)
LinkBack to this Thread: http://www.cpper.com/c/t4838.html | ||||
| 作者 | For | Type | 日期 | |
| 【跟着pongba思考】也是一道面试题 - TopLanguage | Google Groups | This thread | Refback | 2008-05-24 03:21 PM | |
| 【跟着pongba思考】也是一道面试题 - TopLanguage | Google Groups | This thread | Refback | 2008-05-23 08:37 PM | |
| 【跟着pongba思考】也是一道面试题 - TopLanguage | Google Groups | This thread | Refback | 2008-05-20 05:30 PM | |
| TopLanguage | Google | This thread | Refback | 2008-05-20 03:42 PM | |
| Untitled document | This thread | Refback | 2008-05-20 03:12 PM | |
相似的主题 | ||||
| 主题 | 主题作者 | 版面 | 回复 | 最后发表 |
| 一道关于数组的题 | zero | 算法 | 20 | 2006-06-12 06:26 PM |
| How To Organize Template Source Code | zweily | C/CPP/TMP/GP | 14 | 2004-10-08 11:45 PM |
| [原创]如何组织使用模版技术的源代码(翻译自The Code Project) | zweily | 技术杂烩 | 0 | 2004-07-16 11:46 PM |
| [BMP]文件格式 | codinggirl | 技术杂烩 | 3 | 2004-07-01 09:40 PM |
| [XLS]excel格式 | famel | 技术杂烩 | 1 | 2004-07-01 08:58 PM |