用cpp写就过了,但是用java会超时超内存,请问有什么优化的方法吗
import java.util.Arrays;
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
class Com implements Comparable{
int num;//选手编号
int score;//选手分数
public int compareTo(Object o) {//便于用sort排序
Com c=(Com) o;
if(this.score>c.score) {
return -1;
}else if(this.score==c.score) {
return this.num-c.num;
}else {
return 1;
}
}
}
public class Main {
public static void Merge(Com []C1,Com []win,Com []lose,int p1,int p2) {//归并排序
int i,j,k;
for(i=0,j=0,k=0;i<p1&&j<p2;k++) {
if(win[i].score>lose[j].score) {
C1[k]=win[i];
i++;
}else if(win[i].score==lose[j].score) {
if(win[i].num<lose[j].num) {
C1[k]=win[i];
i++;
}else {
C1[k]=lose[j];
j++;
}
}else {
C1[k]=lose[j];
j++;
}
}
while(i<p1) {
C1[k]=win[i];
i++;
k++;
}
while(j<p2) {
C1[k]=lose[j];
j++;
k++;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n=scan.nextInt(),r=scan.nextInt(),q=scan.nextInt();
Com []C1=new Com[2*n];
Com []win=new Com[n];//赢的选手
Com []lose=new Com[n];//输的选手
int []ability=new int[2*n];//选手的能力值
int p1=0;
int p2=0;
for(int i=0;i<2*n;i++) {
C1[i]=new Com();
C1[i].num=i;
C1[i].score=scan.nextInt();
}
for(int i=0;i<n;i++) {
win[i]=new Com();
lose[i]=new Com();
}
for(int i=0;i<2*n;i++) {
ability[i]=scan.nextInt();
}
Arrays.sort(C1, 0, 2*n);//第一遍直接sort
for(int i=0;i<r;i++) {//比赛
for(int k=1;k<2*n;k+=2) {
if(ability[C1[k].num]>ability[C1[k-1].num]) {
C1[k].score++;//赢了加分并添加入赢者队列
win[p1]=C1[k];
p1++;
lose[p2]=C1[k-1];
p2++;
}else {
C1[k-1].score++;
win[p1]=C1[k-1];
p1++;
lose[p2]=C1[k];
p2++;
}
}
Merge(C1,win,lose,p1,p2);//归并排序
p1=0;
p2=0;
}
System.out.println(C1[q-1].num+1);
scan.close();
}
}