交换数组里的任意两个子串的位置
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次置逆,代码很简单:
由于不是链表,不能直接断链,相接,数组存在移动的问题,还要判断有没有重叠的问题,总体思路就是:
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); }
相关文章推荐
- Java 将任意数组的任意两个位置的数据进行交换
- 交换一个数组前两个元素位置(@的用法)
- 给定一个01串(仅由‘ 0’或‘1’组成的字符串),现在想把这个数字串排序成“非递减”有序序列,请问至少需要多少次交换(任意两个位置交换)
- 【面试题】-数组A中任意两个相邻元素大小相差1,找出某个数在数组A中的位置。(所有位置 )
- 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- Swift - 交换数组中两个元素位置
- 交换数组中两个位置的元素值
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 华为面试题 题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 有两个数组a,b,大小都为n,数组元素的值任意,无序;要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 《数组-规划》 有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小
- 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。
- 【华为】题目:有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求: 通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小。
- 数组中两个元素交换位置
- (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- 华为面试题(8分钟写出代码) 有两个数组a,b,大小都为n,数组元素的值任意,无序; 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
- 二进制文件每两个的字节位置交换