4日目奇数と偶数の前に配列順序を調整
2105 ワード
列の順序を調整して奇数と偶数の前に位置します
入力:入力異常の検証(NULL、長さ0)
テスト:
参考資料:
《剣指offer》面試験問題14
入力:入力異常の検証(NULL、長さ0)
テスト:
/**
* 14
*
* 2014-1-18
*/
public class ReorderArray {
public int[] reorderArray(int[] arr) {
if (arr == null || arr.length <= 0) {
throw new NullPointerException();
}
int left = 0;
int right = arr.length - 1;
while (left < right) {
//
while (left < arr.length && !moveToLeft(arr[left])) {
left++;
}
while (right >= 0 && moveToLeft(arr[right])) {
right--;
}
if (left < right) {
swap(arr, left, right);
left++;
right--;
}
}
return arr;
}
public boolean equal(int[] arr1, int[] arr2) {
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
/**
* , ,
*
* @param value
* @return
*/
private boolean moveToLeft(int value) {
return (value & 0x1) == 0;
}
private void swap(int[] arr, int indexOne, int indexTwo) {
int temp = arr[indexOne];
arr[indexOne] = arr[indexTwo];
arr[indexTwo] = temp;
}
public static void main(String[] args) {
boolean flag = true;
ReorderArray reorderArray = new ReorderArray();
//
int[] arr1 = {1};
int[] result1 = {1};
reorderArray.reorderArray(arr1);
flag &= reorderArray.equal(arr1, result1);
//
int[] arr2 = {1, 1, 1, 1};
int[] result2 = {1, 1, 1, 1};
reorderArray.reorderArray(arr2);
flag &= reorderArray.equal(arr2, result2);
//
int[] arr3 = {8, 8, 8};
int[] result3 = {8, 8, 8};
reorderArray.reorderArray(arr3);
flag &= reorderArray.equal(arr3, result3);
//
int[] arr4 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] result4 = {1, 9, 3, 7, 5, 6, 4, 8, 2, 10};
reorderArray.reorderArray(arr4);
flag &= reorderArray.equal(arr4, result4);
//
boolean tryFlag = false;
try {
reorderArray.reorderArray(null);
} catch (NullPointerException e) {
tryFlag = true;
} finally {
//
flag = tryFlag;
}
System.out.println(flag);
}
}
参考資料:
《剣指offer》面試験問題14