Redian新闻
>
MS a0, a1, ..., b0, b1... 问题
avatar
MS a0, a1, ..., b0, b1... 问题# JobHunting - 待字闺中
l*r
1
Input:
[a1,a2,a3...,an,b1,b2...bn]
Output: [a1,b1,a2,b2.....an,bn] , solution should be in-place.
除了N*N, 还有更好的办法不?
avatar
w*e
5

我觉得可以用leetcode里面missingfirstpositive差不多的解法,
比如你有array 12345678 要变成 15263748
int getIndex(int i){
if (i > n) return (2*(i-n) - 1);
else return (i*2 - 2);
}
for (int i = 0; i < 2*n; i++){
while (getIndex(array[i]) != i)
swap(array[i], array[getIndex(array[i]]);
}
index: 01234567
12345678
132..
15243...
15273648
15263748 done

【在 l********r 的大作中提到】
: Input:
: [a1,a2,a3...,an,b1,b2...bn]
: Output: [a1,b1,a2,b2.....an,bn] , solution should be in-place.
: 除了N*N, 还有更好的办法不?

avatar
l*n
6
类似,但是有区别。first missing positive里面可以简单跳过一些element,但是本
题如果出现“环”之后,没有办法判断下一个element是否被rearrange过,所以会需要
额外的空间进行标记才行。

【在 w*******e 的大作中提到】
:
: 我觉得可以用leetcode里面missingfirstpositive差不多的解法,
: 比如你有array 12345678 要变成 15263748
: int getIndex(int i){
: if (i > n) return (2*(i-n) - 1);
: else return (i*2 - 2);
: }
: for (int i = 0; i < 2*n; i++){
: while (getIndex(array[i]) != i)
: swap(array[i], array[getIndex(array[i]]);

avatar
b*e
7
其实是考虑函数
x_i+1 = (2*x_i) % (n-1)
当n even, 每个element x_i 会移到 element x_i+1。
而当 n = 3^k + 1的时候这个函数能遍历所有1...n-2. 所以换一圈后就搞定了。当 n!
=3^k+1的时候,可以分段先搞定一段,然后下一段。
现场考这题基本就挂了。

【在 v****a 的大作中提到】
: http://www.geeksforgeeks.org/an-in-place-algorithm-for-string-t
avatar
v*a
8
这个没错,但是复杂度是n*n 吧。这道题要求in-place 又是linear的确就难了。。

【在 w*******e 的大作中提到】
:
: 我觉得可以用leetcode里面missingfirstpositive差不多的解法,
: 比如你有array 12345678 要变成 15263748
: int getIndex(int i){
: if (i > n) return (2*(i-n) - 1);
: else return (i*2 - 2);
: }
: for (int i = 0; i < 2*n; i++){
: while (getIndex(array[i]) != i)
: swap(array[i], array[getIndex(array[i]]);

avatar
s*x
9

nlogn 应该就可以了, code 很好写, recursion,
abcde12345 to abc321 ed45 to abc123de45
,then recursively do abc123 and de45

【在 v****a 的大作中提到】
: 这个没错,但是复杂度是n*n 吧。这道题要求in-place 又是linear的确就难了。。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。