您的位置:首页 > 其它

交换数组里的任意两个子串的位置

2012-05-11 13:48 239 查看
例如:数组0,1,2,3,4,5,6,7,8,9,10,11,12,要交换1,2子串和7,8,9子串的位置,形成0,7,8,9,3,4,5,6,1,2,10,11,12

由于不是链表,不能直接断链,相接,数组存在移动的问题,还要判断有没有重叠的问题,总体思路就是:
1)将1~9置逆
2)将1~3置逆
3)将4~7置逆
4)将8~9置逆
跟之前的数组旋转类似,那个由于是没有间隔的,所以只要置逆3次,这里中间可能有间隔,所以最多要做4次置逆,代码很简单:

public static void doAgainst(int[] a, int start, int end) {
int temp;
System.out.println("start = " + start + ", end = " + end);
while (start <= end) {
temp = a[start];
a[start] = a[end];
a[end] = temp;
start++;
end--;
}
}

public static void Merge1(int[] a, int x1, int x2, int x3, int x4) {
// 将x1~x2之间的字串和x3~x4之间的字串交换
int x12 = x2 - x1;
int x34 = x4 - x3;
doAgainst(a, x1, x4);
doAgainst(a, x1, x1 + x34);
doAgainst(a, x1 + x34 + 1, x3 + x34 - x12 - 1);
doAgainst(a, x3 + x34 - x12, x4);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐