zoukankan      html  css  js  c++  java
  • [LintCode] Interleaving Positive and Negative Numbers

    Given an array with positive and negative integers. Re-range it to interleaving with positive and negative integers.

    Example

    Given [-1, -2, -3, 4, 5, 6], after re-range, it will be[-1, 5, -2, 4, -3, 6] or any other reasonable answer.

    Note

    You are not necessary to keep the original order of positive integers or negative integers.

    Challenge

    Do it in-place and without extra memory.

    class Solution {
    public:
        /**
         * @param A: An integer array.
         * @return: void
         */
         void rerange(vector<int> &A) {
           int n = A.size();
           if(n < 3) return;
           
           int posNum = 0, negNum = 0, posIdx = 0, negIdx = 1;
           for(size_t t = 0;t < n;++t){
               if(A[t] >= 0) ++posNum;
               else ++negNum;
           }
           
           if(negNum > posNum){
               negIdx = 0;
               posIdx = 1;
           }
           
           while(posIdx < n && negIdx < n){
               while(posIdx < n && A[posIdx] >= 0) posIdx += 2;
               while(negIdx < n && A[negIdx] < 0) negIdx += 2;
               if(posIdx < n && negIdx < n) swap(A[posIdx],A[negIdx]);
           }
       }
      
    };
  • 相关阅读:
    长宽广州地区DNS
    修改PHP的memory_limit限制
    适用于Magento的最合适的.htaccess写法
    在magento中如何回复客户的评论
    冲刺!
    冲刺!
    冲刺!
    冲刺!
    冲刺!
    冲刺!
  • 原文地址:https://www.cnblogs.com/changchengxiao/p/4793731.html
Copyright © 2011-2022 走看看