列表

详情


NC77. 调整数组顺序使奇数位于偶数前面(一)

描述

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

数据范围:,数组中每个数的值
要求:时间复杂度 ,空间复杂度
进阶:时间复杂度 ,空间复杂度

示例1

输入:

[1,2,3,4]

输出:

[1,3,2,4]

示例2

输入:

[2,4,6,5,7]

输出:

[5,7,2,4,6]

示例3

输入:

[1,3,5,6,7]

输出:

[1,3,5,7,6]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2022-08-07

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int* reOrderArray(int* array, int arrayLen, int* returnSize ) {
    // write code here
    // base
    int *odd = (int *)malloc(sizeof(int) * arrayLen);
    int *even = (int *)malloc(sizeof(int) * arrayLen);
    int odd_idx = 0, even_idx = 0;
    *returnSize = arrayLen;
    for (int i = 0; i < arrayLen; i++) {
        if (array[i] % 2 == 1) {
            odd[odd_idx] = array[i];
            odd_idx++;
        } else {
            even[even_idx] = array[i];
            even_idx++;
        }
    }
    for (int i = odd_idx; i < arrayLen; i++) {
        odd[i] = even[i - odd_idx];
    }
    return odd;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-04-27

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArray(vector<int>& array) {
        vector<int> odd;
        vector<int> even;
        vector<int> ans;
        for(int i=0;i<array.size();++i){
            if(array[i]%2==1) odd.push_back(array[i]);
            else even.push_back(array[i]);
        }
        ans.insert(ans.end(),odd.begin(),odd.end());
        ans.insert(ans.end(),even.begin(),even.end());
        return ans;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-02-24

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArray(vector<int>& array) {
        // write code here
        int i = 0, j, k;
        int size = array.size();
        for (j = 0; j < size; j++) {
            if (array[j] % 2) {
                int tmp = array[j];
                for (k = j-1; k >= i; k--) {
                    array[k+1] = array[k];
                }
                array[i] = tmp;
                i++;
            }
        }
        return array;
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2021-12-24

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int* reOrderArray(int* array, int arrayLen, int* returnSize ) {
    int ji[2500]={0};
    int ou[2500]={0};
    int ji_count=0;
    int ou_count=0;
    for(int i=0;i<arrayLen;i++)
    {
        if(array[i]%2 == 0)
        {
            ou[ou_count++] = array[i];
        }
        else
        {
            ji[ji_count++] = array[i];
        }
    }
    for(int i=0;i<ji_count;i++)
    {
        array[i] = ji[i];
    }
    for(int i=0;i<ou_count;i++)
    {
        array[i+ji_count] = ou[i];
    }
    *returnSize = arrayLen;
    return array;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 424KB, 提交时间: 2022-06-14

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArray(vector<int>& array) {
        // write code here
        vector<int> arr;
        for(auto it :array)
        {
            if(it%2==1) arr.push_back(it);
        }
        for(auto it :array)
        {
            if(it%2==0)arr.push_back(it);
        }
        return arr;
    }
};

上一题