给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
样例
给出数组[-1, -2, -3, 4, 5, 6]
,重新排序之后,变成[-1, 5, -2, 4, -3, 6]
或者其他任何满足要求的答案
注意
不需要保持正整数或者负整数原来的顺序。
挑战
原地完成,没有额外的空间
class Solution {
public:
/**
* @param A: An integer array.
* @return: void
*/
void rerange(vector<int> &A) {
// write your code here
int n = A.size();
if (n < 2)
{
return;
}
int p, q;
bool isOdd = true;
if (A[0] < 0)
{
q = 2;
p = 1;
isOdd = false;
}
else
{
q = 1;
p = 0;
}
while (p < n)
{
if (!isOdd)
{
if (p & 1)
{
if (A[p] < 0)
{
while (A[q] < 0)
{
q += 2;
}
swap(A[p], A[q]);
q += 2;
}
}
}
else
{
if (!(p & 1))
{
if (A[p] < 0)
{
while (A[q] < 0)
{
q += 2;
}
swap(A[p], A[q]);
q += 2;
}
}
}
p++;
}
}
};