猿辅导笔试编程第二题
题目大意:多个角色,每三个角色可组成一组,最多可以组成多少组。
思路:每次选取最大的三个数减1,直到第三大的数为零。
代码我没有测试过,别人笔试时让我帮忙看下,我就自己实现了下,不知道效果如何。
import java.util.*;
public abstract class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int c=sc.nextInt();
int result[]=new int[c];
for (int i = 0; i <c; i ) {
int T=sc.nextInt();
int[] temp=new int[T];
for (int j = 0; j <T ; j ) {
temp[j]=sc.nextInt();
}
result[i]=getMax1(temp);
}
for (int i = 0; i <c ; i ) {
System.out.println(result[i]);
}
}
//之前有些回复指出此种方***超时,所以利用优先队列实现了下,不知道效果如何
/*public static int getMax(int[] array){
int len=array.length;
if(len<3){
return 0;
}
Arrays.sort(array);
int count=0;
while(array[len-3]!=0){
count ;
array[len-3]--;
array[len-2]--;
array[len-1]--;
Arrays.sort(array);
}
return count;
}*/
public static int getMax1(int[] array){
PriorityQueue<Integer> priorityQueue=new PriorityQueue(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
int len=array.length;
if(len<3){
return 0;
}
for (int i = 0; i <array.length ; i ) {
priorityQueue.add(array[i]);
}
boolean flag=true;
int count=0;
while (flag){
int a=priorityQueue.poll();
int b=priorityQueue.poll();
int c=priorityQueue.poll();
if(c>=1){
count ;
priorityQueue.add(a-1);
priorityQueue.add(b-1);
priorityQueue.add(c-1);
}else{
flag=false;
}
};
return count;
}
}
查看7道真题和解析
基恩士成长空间 419人发布