奇偶序列 码蹄集

题目来源:码蹄集

题目描述:

在这里插入图片描述
在这里插入图片描述
B站老师思路讲解链接:https://www.bilibili.com/video/BV1MX4y1R77W/?t=647.2&vd_source=3ae2a916df1bc5c1114c2bf3e95a2118

C++代码实现:

原文参考链接:https://blog.51cto.com/u_15745546/5950613

#include<bits/stdc++.h>

using namespace std;

const int N=1e5+100;

int a[N];
int ans[N];
vector<int> odd,even;

int main() {
    int n;
    cin>>n;

    for(int i=1;i<=n;i++) {
        cin>>a[i];
    }

    for(int i=1;i<=n;i++){
        ans[i]=a[i]&1;
        if(ans[i]) odd.push_back(a[i]);
        else even.push_back(a[i]);
    }

    sort(odd.begin(),odd.end());
    sort(even.begin(),even.end());

    int p1=0,p2=0;
    for(int i=1;i<=n;i++){
        if(ans[i]) cout<<odd[p1++]<<" ";
        else cout<<even[p2++]<<" ";
    }

    cout<<endl;
    return 0;
}

Python代码实现:

n = int(input())
a = list(map(int, input().split()))

ans = []
odd = []
even = []

for i in range(n):
    ans.append(a[i] & 1)
    if ans[i]:
        odd.append(a[i])
    else:
        even.append(a[i])

odd.sort()
even.sort()

p1 = 0
p2 = 0

for i in range(n):
    if ans[i]:
        print(odd[p1], end=" ")
        p1 += 1
    else:
        print(even[p2], end=" ")
        p2 += 1

print()

Java代码实现:

import java.util.*;

public class Main {
    static final int N = 100010;

    static int[] a = new int[N];
    static int[] ans = new int[N];
    static List<Integer> odd = new ArrayList<>();
    static List<Integer> even = new ArrayList<>();

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();

        for(int i=1; i<=n; i++) {
            a[i] = scan.nextInt();
        }

        for(int i=1; i<=n; i++){
            ans[i]=a[i]&1;
            if(ans[i] == 1) odd.add(a[i]);
            else even.add(a[i]);
        }

        Collections.sort(odd);
        Collections.sort(even);

        int p1=0,p2=0;
        for(int i=1;i<=n;i++){
            if(ans[i] == 1) System.out.print(odd.get(p1++)+" ");
            else System.out.print(even.get(p2++)+" ");
        }

        System.out.println();
    }
}

代码提交测试结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magneto_万磁王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值