当前位置: 首页 > 后端技术 > Java

会议室919,920,1897

时间:2023-04-01 22:43:30 Java

会议室I主题标题链接:描述给定的一系列会议时间间隔,包括开始和结束时间[[s1,e1],[s2,e2],...(siintervals){if(intervals==null||intervals.size()==0){返回真;}Collections.sort(intervals,newComparator(){@Overridepublicintcompare(Intervalo1,Intervalo2){returno1.start-o2.start;}});intend=intervals.get(0).getEnd();对于(inti=1;iintervals){if(intervals==null||intervals.size()==0){返回0;}Collections.sort(intervals,newComparator(){@Overridepublicintcompare(Intervalo1,Intervalo2){returno1.start-o2.start;}});PriorityQueueendTimeList=newPriorityQueue<>();endTimeList.offer(intervals.get(0).getEnd());对于(inti=1;i=endTimeList.peek()){endTimeList.poll();}endTimeList.offer(intervals.get(i).getEnd());}returnendTimeList.size();}会议室III题目链接:描述你有一个当前的会议列表intervals,它表示每次会议的开始和结束时间,以及一些会议室。现在有一系列的会议请求需要加入,一一判断是否可以无冲突的安排在当前会议列表中。一个会议室一次只能召开一个会议。每个查询都相互独立。可以拆分已安排的会议。如果需要安排[2,4]会议,可以分为[2,3]和[3,4]两段。示例1:输入:间隔:[[1,2],[4,5],[8,10]],rooms=1,ask:[[2,3],[3,4]]输出:[true,true]解释:对于[2,3]的查询,我们可以安排一个会议室room0。以下是room0的会议列表:[[1,2],[2,3],[4,5],[8,10]][3,4]的询价,我们可以安排会议室房间0。以下是room0的会议列表:[[1,2],[3,4],[4,5],[8,10]]例2:输入:[[1,2],[4,5],[8,10]]1[[4,5],[5,6]]输出:[false,true]Answer/***1897*你有一个当前的会议列表间隔,它表示每个会议的开始会议和结束时间,以及一些会议室。现在有一系列的会议请求需要加入,一一判断是否可以无冲突的安排在当前会议列表中。一个会议室一次只能召开一个会议。每个查询都相互独立。*

*可以拆分已安排的会议。如果需要安排[2,4]会议,可以分为[2,3]和[3,4]两段。**@paramintervals:间隔*@paramrooms:房间总和*@paramask:ask*@return:trueorfalseofeachmeeting*/publicboolean[]meetingRoomIII(int[][]intervals,introoms,int[][]ask){//1.汇总每次会议开始时间和结束时间对应的数字MapsumMap=newHashMap<>();for(int[]interval:intervals){sumMap.put(interval[0],sumMap.getOrDefault(interval[0],0)+1);sumMap.put(间隔[1],sumMap.getOrDefault(间隔[1],0)-1);}//2.将开始时间和结束时间合并到同一个列表中ListoriginalList=newArrayList<>();for(Map.Entryentry:sumMap.entrySet()){originalList.add(newint[]{entry.getKey(),entry.getValue()});}//3.列表中的时间按顺序排序0]-o2[0];}});intpreNum=0;列表invalidList=newArrayList<>();//4.当前时间段是否可以插入新的会议for(inti=0;iask[i][0]){ans[i]=false;}else{ans[i]=true;}}returnans;}/***使用二分查找发现pos.get(i)[1]大于one[0]**@parampos*@paramone*@return*/publicinthelper(Listpos,int[]one){intleft=0;int右=位置。大小()-1;while(left<=right){intmid=(left+right)>>1;如果(pos.get(mid)[1]>one[0]){right=mid-1;}else{左=中+1;}}returnleft;}这篇文章对你有帮助,请给“凌野君”点个赞,谢谢支持