列表

详情


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

描述

输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。

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

示例1

输入:

[1,2,3,4]

输出:

[1,3,2,4]

说明:

[3,1,2,4]或者[3,1,4,2]也是正确答案

示例2

输入:

[1,3,5,6,7]

输出:

[1,3,5,7,6]

说明:

[3,1,5,7,6]等也是正确答案

示例3

输入:

[1,4,4,3]

输出:

[1,3,4,4]

原站题解

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

C++ 解法, 执行用时: 9ms, 内存消耗: 1552KB, 提交时间: 2022-01-12

const static auto sync_off = []{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArrayTwo(vector<int>& array) {
        // write code here
        for(int i=0,j=array.size()-1;i<j;)
        {
            if(!(array[i]&1))
            {
                swap(array[i],array[j--]);
            }
            else if(array[j]&1)
            {
                swap(array[j], array[i++]);
            }
            else{
                ++i,--j;
            }
        }
        return array;
    }
};

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

const static auto sync_off = []{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArrayTwo(vector<int>& array) {
        // write code here
        int pl = 0, pr = array.size()-1;
        while(pl < pr){
            if(!(array[pl] & 1)){
                swap(array[pl], array[pr]);
                --pr;
            }
            else if(array[pr] & 1){
                swap(array[pl], array[pr]);
                ++pl;
            }
            else{
                ++pl, --pr;
            }
        }
        return array;
    }
};

C 解法, 执行用时: 11ms, 内存消耗: 1428KB, 提交时间: 2022-01-17

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */

int* reOrderArrayTwo(int* array, int arrayLen, int* returnSize ) {
    // write code here
    int low = 0;
    int high = arrayLen - 1;
    while(low < high){
        while((array[low] &1) != 0) low++;
        while((array[high] &1) == 0) high--;
        if (low < high){
            int tmp = 0;
            tmp = array[low];
            array[low] = array[high];
            array[high] = tmp;
        }
    }
    *returnSize = arrayLen;
    return array;
}

C 解法, 执行用时: 11ms, 内存消耗: 1436KB, 提交时间: 2021-10-22

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param array int整型一维数组 
 * @param arrayLen int array数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* reOrderArrayTwo(int* array, int arrayLen, int* returnSize ) {
    // write code here
    int i=0;
    int j=arrayLen-1;
    int temp = 0;
    while(j>i)
    {
        if(array[i]%2 != 0)
        {
            i++;
            continue;
        }
        if (array[j]%2 == 0)
        {
            j--;
            continue;
        }
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;           
    }
    *returnSize = arrayLen;
    return array;
}

C 解法, 执行用时: 11ms, 内存消耗: 1460KB, 提交时间: 2022-02-09

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

上一题