交错正负数

给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
 注意事项
不需要保持正整数或者负整数原来的顺序。
样例

给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案

思路,首先将数组中的所有正数(负数)移到左半边,负数(正数)移到右半边,我的代码中是后一种,也就是说所有的正数在前,负数在后,然后判断,当数组长度是偶数的时候,直接让left=1,right=数组长度-2,然后开始交换,交换玩一次,left+2,right-2,继续交换,直至left>=right结束;而当数组长度是偶数时,需要判断中间的数也就是A[n/2]的正负,这里暂时用n表示数组长度,当A[n/2]是正数的时候,说明正数比负数多至少一个,其实这里考虑多一个的情况就可以了,因为想要真正的正负交替,只有正负数的个数一样多,或者正数比负数多一个,负数比正数多一个。如果多出的数量大于一的话,就没法说是真正意义上的正负数交错的数组了,必然有两个同号的相连。所以在这里,当正数比负数多一个的时候,就把正数和第一个数(负数)交换,然后从第二个位置到最后一个位置,再按照长度是偶数的做法交换即可,负数比正数多一个也一样,把负数与最后一个数(正数)交换,然后再做。

import java.util.Scanner;

/**
 * 
 * 给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。
 注意事项
不需要保持正整数或者负整数原来的顺序。
样例
给出数组[-1, -2, -3, 4, 5, 6],重新排序之后,变成[-1, 5, -2, 4, -3, 6]或者其他任何满足要求的答案
 * @author Dell
 *
 */
public class Test144 {
   public static void rerange(int[] A)
   {
	   if(A.length==0||A.length==1)
		   return;
	   int q=-1;
	   int p=0;
	   while(p




你可能感兴趣的:(LeetCode,LeetCode)