推荐

完整《剑指Offer》算法题解析系列请点击 👉 《剑指Offer》全解析 Java 版

 

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

public class Solution {
    public void reOrderArray(int [] array) {
        
    }
}

思路:

先计算出数组中的奇数的个数,记作 num ;

然后复制一个原数组,遍历复制的数组,判断奇数和偶数,并放入原数组;

奇数从下标0开始放,偶数从下标num开始放。

遍历完之后,原数组的数,就变成了奇数在前,偶数在后了。并且奇数和奇数,偶数和偶数的相对位置不变。

 

实现:

public class Solution {
    public void reOrderArray(int [] array) {
        int oddNum = 0; //奇数个数
        for (int x : array)
            if (!isEven(x))
                oddNum++;
            int[] copy = array.clone();
            int i = 0, j = oddNum;
            for (int num : copy){
                if (num % 2 == 1)
                    array[i++] = num;
                else
                    array[j++] = num;
            }
    }
    
    //判断是否是偶数
    private boolean isEven(int x){
        return x % 2 == 0;
    }
}

 

看完之后,如果还有什么不懂的,可以在评论区留言,会及时回答更新。

这里是猿兄,为你分享程序员的世界。

非常感谢各位大佬们能看到这里,如果觉得文章还不错的话, 求点赞👍 求关注💗 求分享👬求评论📝 这些对猿兄来说真的 非常有用!!!

注: 如果猿兄这篇博客有任何错误和建议,欢迎大家留言,不胜感激!