美文网首页
《剑指offer第二版》面试题21:调整数组顺序使奇数位于偶数前

《剑指offer第二版》面试题21:调整数组顺序使奇数位于偶数前

作者: castlet | 来源:发表于2020-03-25 22:32 被阅读0次

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的部分,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

    解题思路:

    1. 用两个指针start和end。
    2. start从数组的开头向后遍历,遇到第一个偶数数字停止。
    3. end从数组的最后往前遍历,遇到第一个奇数数数字停止。
    4. 交换start和end的数字。再继续遍历。

    代码

    void recorderOddEven(int[] data) {
        if (data == null || data.length <= 0) {
            return;
        }
        int start = 0;
        int end = data.length - 1;
        while (start < end) {
            // 找出从start开始的一个偶数
            while (start < end && (data[start] & 1) != 0) {
                start ++;
            }
            // 找出从end开始的一个奇数
            while (start < end && (data[end] & 1) == 0) {
                end--;
            }
    
            // 交换
            if (start < end) {
                int tmp = data[start];
                data[start] = data[end];
                data[end] = tmp;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:《剑指offer第二版》面试题21:调整数组顺序使奇数位于偶数前

          本文链接:https://www.haomeiwen.com/subject/rhyfuhtx.html