lintcode-medium-Interleaving Positive and Negative Numbers

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

 

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

 

class Solution {
    /**
     * @param A: An integer array.
     * @return: void
     */
    public void rerange(int[] A) {
        // write your code here
        
        if(A == null || A.length <= 2)
            return;
        
        int size = A.length;
        
        if(size % 2 == 0)
            rerange(A, 0, size - 1);
        else{
            rerange(A, 0, size - 2);
            if(A[size - 2] * A[size - 1] < 0){
                return;
            }
            else{
                int temp = A[size - 1];
                for(int i = size - 1; i >= 1; i--)
                    A[i] = A[i - 1];
                A[0] = temp;
                
                return;
            }
        }
        
        return;
   }
   
   public void rerange(int[] A, int start, int end){
       for(int i = 1; i <= end; i++){
            if(A[i] * A[i - 1] < 0)
                continue;
            else{
                int j = i + 1;
                
                while(A[j] * A[i] > 0)
                    j++;
                
                swap(A, i, j);
            }
       }
   }
   
   public void swap(int[] A, int i, int j){
       int temp = A[i];
       A[i] = A[j];
       A[j] = temp;
       
       return;
   }
   
}

 

posted @ 2016-03-23 02:35  哥布林工程师  阅读(146)  评论(0编辑  收藏  举报