classSolution{public:doublemaxAverageRatio(vector<vector<int>>&classes,intextraStudents){// (extra pass ratio, pass, total)priority_queue<tuple<double,int,int>>maxHeap;for(constvector<int>&c:classes){constintpass=c[0];constinttotal=c[1];maxHeap.emplace(extraPassRatio(pass,total),pass,total);}for(inti=0;i<extraStudents;++i){constauto[_,pass,total]=maxHeap.top();maxHeap.pop();maxHeap.emplace(extraPassRatio(pass+1,total+1),pass+1,total+1);}doubleratioSum=0;while(!maxHeap.empty()){constauto[_,pass,total]=maxHeap.top();maxHeap.pop();ratioSum+=pass/static_cast<double>(total);}returnratioSum/classes.size();}private:// Returns the extra pass ratio if a brilliant student joins.doubleextraPassRatio(intpass,inttotal){return(pass+1)/static_cast<double>(total+1)-pass/static_cast<double>(total);}};
classSolution{publicdoublemaxAverageRatio(int[][]classes,intextraStudents){// (extra pass ratio, pass, total)PriorityQueue<T>maxHeap=newPriorityQueue<>((a,b)->Double.compare(b.extraPassRatio,a.extraPassRatio));for(int[]c:classes){finalintpass=c[0];finalinttotal=c[1];maxHeap.offer(newT(getExtraPassRatio(pass,total),pass,total));}for(inti=0;i<extraStudents;++i){finalintpass=maxHeap.peek().pass;finalinttotal=maxHeap.poll().total;maxHeap.offer(newT(getExtraPassRatio(pass+1,total+1),pass+1,total+1));}doubleratioSum=0;while(!maxHeap.isEmpty())ratioSum+=maxHeap.peek().pass/(double)maxHeap.poll().total;returnratioSum/classes.length;}// Returns the extra pass ratio if a brilliant student joins.privatedoublegetExtraPassRatio(intpass,inttotal){return(pass+1)/(double)(total+1)-pass/(double)total;}privaterecordT(doubleextraPassRatio,intpass,inttotal){};}
1 2 3 4 5 6 7 8 91011121314151617181920
classSolution:defmaxAverageRatio(self,classes:list[list[int]],extraStudents:int,)->float:defextraPassRatio(pas:int,total:int)->float:"""Returns the extra pass ratio if a brilliant student joins."""return(pas+1)/(total+1)-pas/totalmaxHeap=[(-extraPassRatio(pas,total),pas,total)forpas,totalinclasses]heapq.heapify(maxHeap)for_inrange(extraStudents):_,pas,total=heapq.heappop(maxHeap)heapq.heappush(maxHeap,(-extraPassRatio(pas+1,total+1),pas+1,total+1))returnsum(pas/totalfor_,pas,totalinmaxHeap)/len(maxHeap)
Thanks for stopping by! If you find this site helpful, consider buying me some protein powder to keep me fueled! π