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

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

http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593

1. 题目

调整数组顺序使得奇数位于偶数前面
1 2 3 4 5 => 1 3 5 2 4
题目意思很明确,就是将奇数调整到偶数前面,同时需要保证相对位置不变

2. 分析

现在要知道的是需要将所有的奇数移动到数组前面,则肯定是要和偶数交换,但是交换之后,此时相对位置如何保持?
仔细分析可以知道,我们可以使用双指针,这样的话,一旦交换之后,要保持位置,只需要将当前区间内的数都与最后面一个数依次交换,则可保持一个比较正确的顺序。

3. 代码

代码的话跟着上面的分析来的

    /**
     * 利用双指针来操作
     * 如果是奇数就跳过,偶数才开始双指针走
     */
    public void reOrderArray(int[] array) {
        int odd = 0;
        int even = 0;
        // 因为even一直向前,所以此时需要使用even作为边界
        while (even < array.length) {
            // 奇数就直接跳过
            if (array[even] % 2 != 0) {
                even++;
                odd++;
                continue;
            }
            // 只有偶数的时候才处理
            while (even < array.length && array[even] % 2 == 0) {
                even++;
            }
            if (even >= array.length) break;
            // 到了第一个偶数位置
            swap(array, odd++, even);
            // 然后交换之前到这一段区间的数字
            swapRange(array, odd, even);
        }
    }

    /**
     * 交换区间,注意r保持不变,否则相对顺序不可保持
     */
    public void swapRange(int[] nums, int l, int r) {
        while (l < r) {
            swap(nums, l++, r);
        }
    }

    public void swap(int[] nums, int l, int r) {
        int temp = nums[l];
        nums[l] = nums[r];
        nums[r] = temp;
    }

4. 小结

本题思路很简单,主要就是双指针和相对位置的变换,只要明确了前进的规则以及交换的规则,写出来还是比较简单的。

Keep thinking, keep coding! In Nanjing!

全部评论

相关推荐

2025年初,新的一年开始,我给自己暗暗打气,发誓今年一定要拿到offer。如今2025年即将结束,找工作仍然没有任何水花,如今的失意和落魄和年初信心满满的姿态形成鲜明对比,想必也是因为被社会毒打,认清现实了吧。先分享一下贴主的背景,本人女,本科末流985文科专业,后来保送到华五,成绩一直是班级第一,有过国奖,实习有多段头部大厂经历。发贴的直接原因是今天华为面试挂,在反思中有很多复杂的想法,包括对自身能力的怀疑、对面试官所提问题的不解、对大环境的无奈。贴主是一个说话温柔、不喜欢咄咄逼人、有点社恐的人(基本上算是人们眼中对小女生的刻板印象,所以在历次群面中基本全挂(看到大家争抢当leader、t...
在找内推的小虾米:感觉这一段经历和我好像啊,前段时间面了很多车企,面试项目经历各种被拷打,大多数都没过一面,最有希望拿offer的一个终面挂了把我干破防了,打电话给爸妈哭了一个多小时才缓过来。我也开始否定自己,否定自己的一切,包括性格,能力,成长经历。。。最后面了深圳的某家公司,面试官人都挺友好,提的问题有深度但找到切入点 ,最后hr也按岗位最高的标准给的offer,我才发现自己并没有这么不堪,只是我的能力和经验和之前的岗位要求不那么符合而已。帖主一定不要灰心,招聘的窗口期还有很长很长,保持自信扬长避短,一定有企业能发现你的闪光点,祝好。
我的求职进度条
点赞 评论 收藏
分享
爱吃烤肠的牛油最喜欢...:50K是ssp了估计,ssp的人家多厉害都不用说,每年比例大概在百分之5左右
点赞 评论 收藏
分享
独角仙梦境:简历不要写和技术无关的内容
点赞 评论 收藏
分享
昨天 15:54
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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