• 调整数组顺序使奇数放在偶数之前


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

    【思路】首先我们很快会想到使用辅助数组,分别统计奇数和偶数,然后再将这两个数组合并起来!注意一点,我们不需要去建立两个数组,只使用一个数组就好,奇数数组可以使用原数组!

     1class Solution {
     2public:
     3    void reOrderArray(vector<int> &array) {
     4        vector<int> even(array.size());
     5        int i = 0, j = 0;  // i为原数组索引,j为辅助数组索引
     6        for(auto num: array){
     7            if((num & 1) == 1){
     8                array[i++] = num;
     9            }else{
    10                even[j++] = num;
    11            }
    12        }
    13        for(int k=0;k < j; k++){
    14            array[i++] = even[k];
    15        }
    16    }
    17};

    那我们能不是不使用额外的空间复杂度呢?当然可以,由于题目要求奇数和偶数的相对顺序保持不变,也就是排序的稳定性,而经过我们之前对常用排序算法的了解,知道插入排序是稳定的!因此我们可以遍历整个数组,如果为奇数,则与其前面的所有偶数交换位置,这样也可以达到我们的目的!

     1class Solution {
     2public:
     3    // 类似于插入排序的方法,将奇数依次的插入到偶数的前面
     4    void reOrderArray(vector<int> &array) {
     5        for(int i = 0;i < array.size(); ++i){
     6            if((array[i] & 1) == 1){  // 如果当前值为奇数
     7                for(int j = i-1; j >=0; j--){
     8                    if((array[j] & 1) == 0){  // 遍历i的前面,如果为偶数,则交换
     9                        swap(array[j], array[j+1]);
    10                    }
    11                }
    12            }
    13        }
    14    }
    15};
  • 相关阅读:
    python中元类(metaclass)的理解
    aiohttp
    async/await
    asyncio
    协程
    Bayesian Non-Exhaustive Classification A case study:online name disambiguation using temporal record streams
    技术网址
    网站
    各种网址
    OpenGL学习网址2
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11313402.html
Copyright © 2020-2023  润新知