题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位予数组的后半部分。
思路分析:
一审题,就可以想到用双指针来解决。设置2个首尾指针lower和high:
- 从前到后找到第1个偶数;
- 从后到前找到第1个奇数;
- 交换并更新lower,high:
lower++,high--;
参考代码:
public static void reorderOddEven(int[] arr) {
if(arr == null || arr.length < 2)return;
int lower = 0;
int high = arr.length - 1;
while(lower < high){
while(lower < high && arr[lower] % 2 != 0)lower++;//从左到右找到第1个偶数
while(lower < high && arr[high] % 2 == 0)high--;//从右到左找到第1个奇数
swap(arr, lower, high);//交换
lower ++;
high --;
}
}
public void swap(int[] nums, int i, int j){
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
(完)