• 剑指offer 20. 调整数组顺序使奇数位于偶数前面


    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
    📚专栏地址:剑指offer系列题解
    📝原题地址:题目地址
    📣专栏定位:为找工作的小伙伴整理常考算法题解,祝大家都能成功上岸!
    ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序。

    使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

    数据范围

    数组长度 [0,100]。

    样例

    输入:[1,2,3,4,5]
    
    输出: [1,3,5,2,4]
    
    • 1
    • 2
    • 3

    方法一:双指针扫描 O(n)

    这道题可以用双指针来做:

    1. 左指针从前往后遍历,找到第一个偶数停止。
    2. 右指针从后往前遍历,找到第一个奇数停止。
    3. 如果左指针没有和右指针相遇,就交换两指针指向的数。

    我们来举一个例子,假设现在要调整数组 [1,2,3,4,5] ,步骤如下:

    第一步: 从左往右找到第一个偶数,从右往左找到第一个奇数。

    在这里插入图片描述

    第二步: 两指针还未相遇,故交换两数。

    在这里插入图片描述

    第三步: 从左往右继续找到下一个偶数,从右往左继续找到下一个奇数。

    在这里插入图片描述

    第四步: 两指针还未相遇,故交换两数。

    在这里插入图片描述

    第五步: 两指针相遇,遍历结束。

    class Solution {
    public:
        void reOrderArray(vector<int>& array) {
            int l = 0, r = array.size() - 1;
            while (l < r) {
                while (l < r && array[l] % 2 == 1)  l++;
                while (l < r && array[r] % 2 == 0)  r--;
                if (l < r)    swap(array[l], array[r]);
            }
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    欢迎大家在评论区交流~

  • 相关阅读:
    AERMOD模型大气环境影响评价
    Python如何自动操作电脑桌面应用程序
    【算法训练-回溯算法 一】【经典模版】全排列
    浅谈大数据之Flink
    STM32嵌入式工程师自我修养
    LeetCode 376. 摆动序列
    ln函数的导数
    uniapp 使用安卓模拟器运行调试
    火焰图简介
    操作系统——磁盘操作
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/126472386