zoukankan      html  css  js  c++  java
  • 剑指Offer——调整数组顺序使奇数位于偶数前面

    Question

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

    Solution

    • 这道题我想到两种解法,一种是类似于冒泡排序,如果前面一个数是偶数,后面一个数是奇数,那么就交换他们两个的位置,最坏情况下时间复杂度为O(n^2),但是有一个好处就是可以就地完成,空间复杂度为O(1)

    • 还有就是用空间换时间,创建两个数组分别用来存奇数和偶数,然后最后在复制到原来数组中,时间复杂度为O(n),空间复杂度为O(n)

    Code

    class Solution {
    public:
        // 空间换时间
        void reOrderArray(vector<int> &array) {
           // 1, 3, 4, 5, 2, 6, 7
           // 1, 3, 5, 7, 4, 2, 6
            vector<int> odds;
            vector<int> evens;
            
            for (int i : array) {
                if (i % 2 == 0) {
                    evens.push_back(i);
                } else
                    odds.push_back(i);
            }
            
            for (int i = 0; i < odds.size(); i++) {
                array[i] = odds[i];
            }
            for (int i = 0, j = odds.size(); i < evens.size(); i++, j++) {
                array[j] = evens[i];
            }
        }
        
        // 思想类似于冒泡,前偶后奇交换
        void reOrderArray(vector<int> &array) {
            if (array.size() <= 1)
                return;
            
            for (int i = 0; i < array.size(); i++) {
                for (int j = 0; j < array.size() - i - 1; j++) {
    				if (array[j] % 2 == 0 && array[j + 1] % 2 != 0)
                        swap(array[j], array[j + 1]);
                }
            }
            
        }
    };
    
  • 相关阅读:
    shell 网络状态查询 ping curl telnet
    shell 命令 rz sz
    shell 命令之 jps
    Python 之 threading
    根据 MySQL 状态优化 ---- 4. 临时表
    根据 MySQL 状态优化 ---- 3. key_buffer_size
    根据 MySQL 状态优化 ---- 2. 连接数
    根据 MySQL 状态优化 ---- 1. 慢查询
    Linux 服务器的网络配置
    Linux 服务器的网络配置
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7101557.html
Copyright © 2011-2022 走看看