题目来源:码蹄集
题目描述:
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();
}
}