描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
示例1
输入:
[1,2,3,4]
复制返回值:
[1,3,2,4]
复制
示例2
输入:
[2,4,6,5,7]
复制返回值:
[5,7,2,4,6]
复制
头尾双指针,一次遍历,头处理奇数,尾处理偶数;
时间复杂度:O(N)
空间复杂度:O(N)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public int [] reOrderArray ( int [] array) { // write code here //双指针,头尾指针 int [] nums = new int [array.length]; int head = 0 ; int tail = array.length- 1 ; int index_head = head; int index_tail = tail; while (head < array.length && tail >= 0 ){ if (array[head] % 2 == 1 ){ //奇数,放前面 nums[index_head] = array[head]; index_head++; } head++; if (array[tail] % 2 == 0 ){ //从后到前,如果为偶数,则从后开始填 nums[index_tail] = array[tail]; index_tail--; } tail--; } return nums; } |