给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
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]);
        }
    }
}

shiyang6017
158 声望59 粉丝