不需要list、collections.sort等。只需要arrays.sort(数组,start,end)//注意参数不再是只有数组。而且,start包含,end不包含。
另外,自定义对象数组的每一个元素都需要单独初始化
自定义对象的类需要实现comparable接口中的compareto()方法。
poj2431涉及到了这个知识点,AC代码粘贴如下。这道题还有非常多坑。
提一嘴,我发现了一个比巫泽俊编的那本书解这个题的方法稍微简单一点点,稍微有点不一样的方法,并且AC了。在下边,/**/注释掉了。
人不会永远菜下去的,嗯!!!
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
//4 25 10 10 14 20 21 10 5 2 4
public class poj2431 {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int N=sc.nextInt();
// sort(t,t+N,cmp);
Node[] t=new Node[N+1];//加油站
for(int i=N-1;i>=0;i--) {
t[i]=new Node();//记得初始化,不然报空指针异常
t[i].a=sc.nextInt();
t[i].b=sc.nextInt();
}
int L=sc.nextInt();//总距离
int P=sc.nextInt();//初始油量
for(int i=0;i<N;i++) {
t[i].a=L-t[i].a;
}
Arrays.sort(t,0,N);
t[N]=new Node();
Node des=new Node();
des.a=L;
des.b=0;
t[N]=des;
//方便起见,将终点也视作加油站
N++;
//new一个重载器,重载优先级使其变为大根堆
Comparator<Integer> cmp;
cmp=new Comparator<Integer>() {
public int compare(Integer e1,Integer e2) {
return e2-e1;
}
};
Queue<Integer> que=new PriorityQueue<Integer>(N,cmp);//优先队列
/*int num=0;int len=0;//已经走过的路程
for(int i=0;i<N;i++) {
while(P<A[i]) {//如果车中油不足以到下一站,加油直到可以通过
if(que.isEmpty()) {
System.out.println(-1);
return;
}else {
int t=que.poll();
P+=t;
num++;
}
}
que.add(B[i]);
}
System.out.println(num);*/
int ans=0;int pos=0; int tank=P;
for(int i=0;i<N;i++) {
int d=t[i].a-pos;//接下去要前进的距离
while(tank<d) {//车上油不足以到达下一个加油站
if(que.isEmpty()) {
System.out.println(-1);
return;
}else {
tank+=que.poll();
ans++;
}
}
tank-=d;
pos=t[i].a;
que.add(t[i].b);
}
System.out.println(ans);
}
}
class Node implements Comparable<Node>{
int a,b;//距离,油量
@Override
public int compareTo(Node o) {
// TODO 自动生成的方法存根
return this.a-o.a;
}
}