给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
TIME COMPLEXITY : O(n)
void rerange(vector<int> &A) {
int cnt_pos = 0;
for (int i = 0; i < A.size(); ++i) {
if (A[i] > 0) {
++cnt_pos;
}
}
bool pos_first = true;
if (cnt_pos * 2 < A.size()) {
pos_first = false;
}
int pos_idx = pos_first ? 0 : 1;
int neg_idx = pos_first ? 1 : 0;
while (pos_idx < A.size() && neg_idx < A.size()) {
while (pos_idx < A.size() && A[pos_idx] > 0) {
pos_idx += 2;
}
while (neg_idx < A.size() && A[neg_idx] < 0) {
neg_idx += 2;
}
if (pos_idx < A.size() && neg_idx < A.size()) {
swap(A[pos_idx], A[neg_idx]);
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。