Interleaving Positive and Negative Numbers
You have exceeded the time limit
Given an array with positive and negative integers. Re-range it to interleaving with positive and negative integers.
Notice
You are not necessary to keep the original order of positive integers or negative integers.
Given [-1, -2, -3, 4, 5, 6]
, after re-range, it will be [-1, 5, -2, 4, -3, 6]
or any other reasonable answer.
这道题一定要做两次循环
第一次循环判断出正数多还是负数多,多的一个种数要放在[0]号位
class Solution {
public:
/**
* @param A: An integer array.
* @return: void
*/
void rerange(vector<int> &A) {
// write your code here
int negativeIdx = 0;
int positiveIdx = 1;
int positiveNum = 0;
if (A.size() % 2)
{
for (int i=0; i<A.size(); i++)
if (A[i] > 0)
positiveNum++;
if (positiveNum > (A.size()/2))
{
positiveIdx = 0;
negativeIdx = 1;
}
}
while (negativeIdx < A.size() && positiveIdx < A.size())
{
while ((negativeIdx < A.size()) && A[negativeIdx] < 0)
negativeIdx += 2;
while ((positiveIdx < A.size()) && A[positiveIdx] > 0 )
positiveIdx += 2;
if (negativeIdx < A.size() && positiveIdx < A.size())
{
int tmp = A[negativeIdx];
A[negativeIdx] = A[positiveIdx];
A[positiveIdx] = tmp;
}
}
}
};