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; } }