描述:
给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
样例:
给出数组[-1, -2, -3, 4, 5, 6]
,重新排序之后,变成[-1, 5, -2, 4, -3, 6]
或者其他任何满足要求的答案
思路:
先确定正负数个数,那个多,从哪个开始。然后建立首尾两个指针,从前开始排序,反复从最后挑选所需的正数或负数
class Solution {
/**
* @param A: An integer array.
* @return: void
*/
public void rerange(int[] A) {
// write your code here
int start = 0;
int len = A.length;
int end = len - 1;
int count = 0;
for(int i =0;i<len;i++){
if(A[i] > 0){
count++;
}
}
boolean flag = false;
if(count > len/2){
flag = true;
}
while(start < len){
end = len - 1;
if(!flag){
while(len > start){
if(A[end] < 0){
int temp = A[start];
A[start] = A[end];
A[end] = temp;
flag = true;
start++;
break;
}else{
end--;
}
}
}else{
while(len > start){
if(A[end] > 0){
int temp = A[start];
A[start] = A[end];
A[end] = temp;
flag = false;
start++;
break;
}else{
end--;
}
}
}
}
}
}