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'll be [-1, 5, -2, 4, -3, 6] or any other reasonable answer.
Note
You aren't necessary to keep the original order of positive integers or negative integers.
Challenge
Do it in-place and without extra memory.
classSolution { Public: /** * @param a:an integer array. * @return: void*/ voidRerange (vector<int> &A) {intn =a.size (); if(N <3)return; intPosnum =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]); } } };
[Lintcode] interleaving Positive and Negative Numbers