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 <= A.length <= 5000
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; }