猿辅导笔试编程第二题
题目大意:多个角色,每三个角色可组成一组,最多可以组成多少组。
思路:每次选取最大的三个数减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; } }