列表

详情


XM18. 数组操作

描述

输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。
要求时间复杂度为O(n)。

输入描述

给定无序数组。
长度不超过1000000。

输出描述

所有偶数位于数组的前半部分,所有奇数位于数组的后半部分。
如果有多个答案可以输出任意一个正确答案。

示例1

输入:

2 4 5 7 8 1

输出:

2 4 8 7 5 1

原站题解

C++ 解法, 执行用时: 128ms, 内存消耗: 15848KB, 提交时间: 2020-10-29

#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main(){
    ios::sync_with_stdio(false);
    cout.tie(NULL);
    int n=0;
    for(;cin>>a[n];++n){
            
    }
    int l=0,r=n-1;
    while(l<r){
        while(l<r&&a[l]%2==0){
            ++l;
        }
        while(l<r&&a[r]%2==1){
            --r;
        }
        swap(a[l],a[r]);
    }
    for(int i=0;i<n;++i)
        cout<<a[i]<<" ";
}

C++ 解法, 执行用时: 130ms, 内存消耗: 15776KB, 提交时间: 2020-08-25

#include<bits/stdc++.h>
using namespace std;
int a[1000005];
int main(){
    ios::sync_with_stdio(false);
    //cout.tie(NULL);
    int n=0;
    for(;cin>>a[n];++n){
          
    }
    int l=0,r=n-1;
    while(l<r){
        while(l<r&&a[l]%2==0){
            ++l;
        }
        while(l<r&&a[r]%2==1){
            --r;
        }
        swap(a[l],a[r]);
    }
    for(int i=0;i<n;++i)
        cout<<a[i]<<" ";
}

上一题