美文网首页
LintCode 144-交错正负数

LintCode 144-交错正负数

作者: 胡哈哈哈 | 来源:发表于2016-05-21 17:08 被阅读120次

分析

  • 注意正负总数不同的情况
  • 采用2个游标分别指向偶数下标和奇数下标,交换不符合条件的元素
class Solution {
public:
    /**
     * @param A: An integer array.
     * @return: void
     */
    void rerange(vector<int> &A) {
        // write your code here
        int tag = 0;
        for (int i = 0; i < A.size(); ++i) {
             if (A[i] > 0) --tag;
             else ++tag;
        }
        if (!tag) tag = 1;
        for (int i = 0, j = 1; i < A.size() && j < A.size(); i += 2, j += 2) {
            while (i < A.size() && tag * A[i] < 0) i += 2;
            while (j < A.size() && tag * A[j] > 0) j += 2;
            if (i < A.size() && j < A.size()) {
                int t = A[i];
                A[i] = A[j];
                A[j] = t;
            }
        }
    }
};

相关文章

网友评论

      本文标题:LintCode 144-交错正负数

      本文链接:https://www.haomeiwen.com/subject/ljhorttx.html