905 -按奇偶校验排序数组

给定一个A非负整数数组,返回一个由所有偶数元素组成的数组A,后跟所有奇数元素A

您可以返回满足此条件的任何答案数组。

例1:

输入:[3,1,2,4] 
输出:[2,4,3,1]
产出[4,2,3,1],[2,4,1,3]和[4,2,1,3]也将被接受。

 

注意:

  1. 1 <= A.length <= 5000
  2. 0 <= A[i] <= 5000
解法1:
设置i为数组首位下标,j为数组末尾下标,当数组下标为i的值为奇数,同时数组下标为j的值为偶数时位置互换,同时i向后移动,j向前移动;若数组下标i的值仅为偶数时i向后移动,其他情况下j向前移动。
 public static  int[] sortArrayByParity(int[] A)
    {
          int i=0,j=A.length-1;
          while(i<j)
          {
              if (A[i]%2==1&&A[j]%2==0)
              {
                  int temp=A[i];
                  A[i]=A[j];
                  A[j]=temp;
                  i++;
                  j--;
              }else if (A[i]%2==0)
              {
                  i++;
              }else {
                  j--;
              }
          }
        return A;
    }
改进后:
  public static  int[] sortArrayByParity(int[] A)
    {
          int i=0,j=A.length-1;
          while(i<j)
          {
              if (A[i]%2==0)
              {
                  i++;
              }else {
                  if (A[j]%2==0){
                      int temp=A[i];
                      A[i]=A[j];
                      A[j]=temp;
                  }
                  j--;
              }
          }
        return A;
    }

解法2:
设置一个跟A容量大小相同的新数组,将A中的偶数从数组首位开始放入,将A中的奇数从末尾开始放入
public int[] sortArrayByParity(int[] A) {
        int[] B = new int[A.length];
        int oddNumber = 0,evenNumber = A.length - 1;
        for (int i=0;i<A.length;i++) {
            if (A[i]%2 == 0) {
                B[oddNumber++] = A[i];
            } else {
                B[evenNumber--] = A[i];
            }
        }
        return B;
    }

 

posted @ 2019-04-13 16:57  Dloading  阅读(164)  评论(0编辑  收藏  举报