交错正负数
给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
注意事项
不需要保持正整数或者负整数原来的顺序。
样例
给出数组[-1, -2, -3, 4, 5, 6]
,重新排序之后,变成[-1, 5, -2, 4, -3, 6]
或者其他任何满足要求的答案
挑战
原地完成,没有额外的空间
解题
1.快速排序
2.定义新数组,交叉选取正负数放到新数组
class Solution {
/**
* @param A: An integer array.
* @return: void
*/
public void rerange(int[] A) {
// write your code here
if(A == null ||A.length == 0)
return;
int low = 0;
int high = A.length - 1;
while(low < high){
// 负数放前
if( low < high && A[low] <0 )
low+=1;
// 正数放后
if( low < high && A[high] >0 )
high-=1;
if(low < high){
int tmp = A[low];
A[low] = A[high];
A[high] = tmp;
}
}
int flag = 0;
if(A.length -low > low)// 正数大于负数
flag =1;
int m = 0,n = low;
int[] B = new int[A.length];
for(int i = 0;i < B.length;i++){
if( flag==0){
if(i%2==0)
B[i]= A[m++];
else
B[i]= A[n++];
}else{
if(i%2==0)
B[i]= A[n++];
else
B[i]= A[m++];
} } for(int i =0;i<A.length;i++)
A[i] = B[i];
}
}