剑指Offer题目14:调整数组顺序使奇数位于偶数前面(Java)

面试题14:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部奇数位于数组的前半部分,全部偶数位于数组的后半部分。面试

扩展要求:并保证奇数和奇数,偶数和偶数之间的相对位置不变。数组

Basic

双指针碰撞法bash

在数据结构为数组的场景,常常会使用到双指针碰撞法来解决移动替换数组元素的问题。数据结构

场景1:头尾双指针碰撞法

对数组设置一个头指针和尾指针,相对而行,遍历整个数组,直到碰撞:head > tail, 跳出循环遍历。

场景2:头指针和中间指针齐头并进法(自创词汇方便记忆),如打印链表倒数第K个节点。

场景n:遇到再补
复制代码

解题思路

本题采用头尾双指针碰撞法。函数

代码实现

  1. 不考虑移位后的相对位置
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;
            }
        }
    }
}
复制代码

  1. 考虑移位后的相对顺序
待补充
复制代码

总结

待补充spa

相关文章
相关标签/搜索