Lintcode: Interleaving Positive and Negative Numbers

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

Note

You are not necessary to keep the original order or positive integers or 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 legal answer.



Challenge

Do it in-place and without extra memory.

这道题没有给出正数、负数谁多谁少,所以需要先统计数量,数量多的要包着数量少的,然后数组尾部全是数量多的数

 1 class Solution {

 2     /**

 3      * @param A: An integer array.

 4      * @return an integer array

 5      */

 6     public int[] rerange(int[] A) {

 7         // write your code here

 8         int posNum = 0, negNum = 0;

 9         for (int elem : A) {

10             if (elem < 0) {

11                 negNum++;

12             }

13             else {

14                 posNum++;

15             }

16         }

17         int posInd = 1, negInd = 0;

18         if (posNum > negNum) {

19             negInd = 1;

20             posInd = 0;

21         }

22         while (posInd<A.length && negInd<A.length) {

23             while (posInd < A.length && A[posInd] > 0) {

24                 posInd += 2;

25             }

26             while (negInd < A.length && A[negInd] < 0) {

27                 negInd += 2;

28             }

29             if (posInd<A.length && negInd<A.length) {

30                 swap(A, posInd, negInd);

33 } 34 } 35 return A; 36 } 37 38 public void swap(int[] A, int l, int r) { 39 int temp = A[l]; 40 A[l] = A[r]; 41 A[r] = temp; 42 } 43 }

 

你可能感兴趣的:(number)