题解 | #调整数组顺序使奇数位于偶数前面#【交换法】

调整数组顺序使奇数位于偶数前面

http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b

思路

我的思路是通过前移部分需要移动的奇数元素,来使得数组中的奇数在数组中的前部分,偶数在后部分,通过遍历数组,如果当前元素为奇数,那么我们需要将它前移到它的前一个数不再是偶数为止,对数组中所有奇数都这样做,最终偶数的顺序也会自然排好。

实现

public class JZ13调整数组顺序使奇数位于偶数前面 {
    public int[] reOrderArray(int[] array) {
        if (array == null) {
            return null;
        }

        int[] tmp = new int[array.length];
        System.arraycopy(array, 0, tmp, 0, tmp.length);

        for (int i = 1; i < tmp.length; i++) {
            if (isOdd(tmp[i])) { //当前为奇数
                int j = i; //记录下当前下标
                while (j >= 1 && !(isOdd(tmp[j - 1]))) { //若前一个数为偶数,则一直前移到前一个数为奇数为止
                    swap(tmp, j - 1, j);
                    j--;
                }
            }
        }
        return tmp;
    }

    /**
     * 交换数组中的两个元素的位置
     *
     * @param array
     * @param i
     * @param j
     */
    public void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    /**
     * 是否为奇数
     *
     * @param x
     * @return
     */
    public boolean isOdd(int x) {
        if (x % 2 != 0) {
            return true;
        }
        return false;
    }
}

之所以运行时间偏低是因为我在之后复盘其他人的题解时,发现他们基本都是用的两数组拼接的方法做的,即遍历一遍数组,奇数元素添加到预创建的一个奇数数组中(或是链表),偶数则同理,最终将奇偶两个数组或链表拼接起来返回,虽然他们这种方法很快,用空间换取了时间,但我认为这种方法锻炼不到思维,没什么意思,因此我更偏向于用我这种交换法去做,当然这只是站在平时锻炼编码能力的角度出发的。

在这里插入图片描述

全部评论

相关推荐

ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
内向的柠檬精在研究求职打法:你们广东工业大学为啥这么多字节,好吓人,还有那个东北大学,重庆邮电,太哈人了
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务