面试题14:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部奇数位于数组的前半部分,全部偶数位于数组的后半部分。面试
扩展要求:并保证奇数和奇数,偶数和偶数之间的相对位置不变。数组
双指针碰撞法bash
在数据结构为数组的场景,常常会使用到双指针碰撞法来解决移动替换数组元素的问题。数据结构
场景1:头尾双指针碰撞法
对数组设置一个头指针和尾指针,相对而行,遍历整个数组,直到碰撞:head > tail, 跳出循环遍历。
场景2:头指针和中间指针齐头并进法(自创词汇方便记忆),如打印链表倒数第K个节点。
场景n:遇到再补
复制代码
本题采用头尾双指针碰撞法。函数
public class Solution {
public void reOrderArray(int [] array) {
if(array == null && array。length == 0){
throw new NullPointerException();
}
int head = 0;
int tail = array.length - 1;
while(head < tail){
while((head < tail) && ((array[head] & 1) == 1)) {
head ++;
}
while((head < tail) && ((array[tail] & 1) == 0)) {
tail --;
}
if(head < tail) {
int tmp = array[head];
array[head] = array[tail];
array[tail] = tmp;
}
}
}
}
复制代码
待补充
复制代码
待补充spa