Given an array with positive and negative integers. Resort the array so that positive and negative elements appear alternately, starting with a positive element. And ensure that the sequence of positive and negative arrays won't change. Do it in place.
For example:
[1, 2, 4, -4] --> [1, -4, 2, 4]
[1, 2, -1, 3, 4, -5, -6] --> [1, -1, 2, -5, 3, -6, 4]
思路:遍历数组,寻找与要求不符合的元素位置a,在这个位置之后,寻找第一个符合要求的元素位置b,将这个数组从位置a到位置b循环右移,保证顺序不变。
public void interleaveNumbers(int[] A) {
if (A == null || A.length <= 1) {
return;
}
for (int i = 0; i < A.length - 1; i++) {
if (i % 2 == 0 && A[i] < 0) {
for (int j = i + 1; j < A.length; j++) {
if (A[j] > 0) {
insertForward(A, i, j);
break;
}
}
} else if (i % 2 == 1 && A[i] > 0) {
for (int j = i + 1; j < A.length; j++) {
if (A[j] < 0) {
insertForward(A, i, j);
break;
}
}
}
}
}
private void insertForward(int[] A, int start, int end) {
int temp = A[end];
for (int i = end; i > start; i--) {
A[i] = A[i - 1];
}
A[start] = temp;
}
本文介绍了一种在不改变序列顺序的情况下,将数组中的正负数交替排列的算法实现过程。通过遍历数组并寻找合适的元素位置进行循环右移操作,实现了正负数的交替排列。
632

被折叠的 条评论
为什么被折叠?



