剑指offer - 调整数组顺序使奇数位于偶数前面(Java实现)

题目链接:https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?tpId=13&&tqId=11166&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  思路一:开两个辅助数组,把奇数和偶数分别存储在数组中,然后将奇数放在前面,偶数放在后面即可。

public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        int[] even = new int[n];
        int[] odd = new int[n];
        int cnt1 = 0, cnt2 = 0;
        for(int i = 0; i < n; ++ i) {
            if(array[i] % 2 == 0) even[cnt1 ++] = array[i];
            else odd[cnt2 ++] = array[i];
        }
        for(int i = 0; i < cnt2; ++ i) {
            array[i] = odd[i];
        }
        for(int i = 0; i < cnt1; ++ i) {
            array[i + cnt2] = even[i];
        }
    }
}

  思路一:设置两个指针 i 和 j,如下图。首先我们找到第一个奇数,如果我们需要将其放入到 i 位置,首先我们需要将 [i, j - 1] 位置上面的值全部后移一位,然后在向 i 中插入第一个奇数,i 指针后移去找后面一个奇数,然后 j 指针后移继续遍历数组,如果找到奇数就按照上述操作继续进行,直到整个数组遍历结束即可。
数组

public class Solution {
    public void reOrderArray(int [] array) {
        int n = array.length;
        int i = 0;
        for(int j = 0; j < n; ++ j) {
            if(array[j] % 2 == 1) {
                int value = array[j];
                for(int k = j - 1; k >= i; -- k) {
                    array[k + 1] = array[k];
                }
                array[i ++] = value;
            }
        }
    }
}
【剑指offer】题目全解 文章被收录于专栏

本专栏主要是刷剑指offer的题解记录

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-29 17:30
找实习找着找着就要进入7月了,马上秋招也要开始了,找实习还有意义吗?
绝迹的星:有面就面, 没面上就当日薪4位数大佬免费培训, 面上了再考虑要不要实习
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务