给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
样例
样例 1
输入 : [-1, -2, -3, 4, 5, 6]
输出 : [-1, 5, -2, 4, -3, 6]
解释 : 或者仍和满足条件的答案
挑战
完成题目,且不消耗额外的空间。
注意事项
不需要保持正整数或者负整数原来的顺序。
void rerange(vector<int> &A)
{
// write your code here
int size = A.size();
int count = 0;
while (count < A.size())
{
int i = 0;
bool bInsert = false;
if (A[count] > 0)
{
//找负数
if (count + 1 < A.size() && A[count + 1] > 0)
{
for (i = count + 1; i < A.size(); i++)
{
if (A[i] < 0)
{
bInsert = true;
break;
}
}
}
}
else if (A[count] < 0)
{
//找正数
if (count + 1 < A.size() && A[count + 1] < 0)
{
for (i = count + 1; i < A.size(); i++)
{
if (A[i] > 0)
{
bInsert = true;
break;
}
}
}
}
if (true == bInsert)
{
int tmp = A[i];
A.erase(A.begin() + i);
A.insert(A.begin() + count + 1, tmp);
}
count++;
}
if (A[A.size() - 1] > 0 && A[A.size() - 2] > 0 && A[0] < 0)
{
int tmp = A[size -1];
A.erase(A.begin()+ size -1);
A.insert(A.begin(), tmp);
}
else if (A[A.size() - 1] < 0 && A[A.size() - 2] < 0 && A[0] > 0)
{
int tmp = A[size - 1];
A.erase(A.begin() + size - 1);
A.insert(A.begin(), tmp);
}
}