美文网首页
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