Java 为什么下面的测试用例的代码输出是3?
我的编码问题与计算给定排程时间的最小房间数有关 给定一系列会议时间间隔,包括开始和结束时间[[s1,e1],[s2,e2],…](siJava 为什么下面的测试用例的代码输出是3?,java,sorting,priority-queue,Java,Sorting,Priority Queue,我的编码问题与计算给定排程时间的最小房间数有关 给定一系列会议时间间隔,包括开始和结束时间[[s1,e1],[s2,e2],…](sia.start-b.start); PriorityQueue pq=新的PriorityQueue(); pq.add(内部资源[0]。结束); 对于(int i=1;i
/**
*Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* }
*/
public class Solution {
/**
* @param intervals: an array of meeting time intervals
* @return: the minimum number of conference rooms required
*/
public int minMeetingRooms(List<Interval> intervals) {
// Write your code here
if(intervals.size() == 0 || intervals == null) {
return 0;
}
Interval[] interArr = new Interval[intervals.size()];
interArr = intervals.toArray(interArr);
Arrays.sort(interArr, (a,b) -> a.start - b.start);
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(interArr[0].end);
for(int i = 1; i < interArr.length; i++) {
Interval curr = interArr[i];
if (curr.start < pq.peek()) {
pq.add(interArr[i].end);
}
}
return pq.size();
}
}
``
/**
*间隔的定义:
*公共类间隔{
*int开始,结束;
*间隔(整数开始,整数结束){
*this.start=start;
*this.end=end;
* }
* }
*/
公共类解决方案{
/**
*@param interval:会议时间间隔数组
*@return:所需的最小会议室数
*/
公共会议室(列出时间间隔){
//在这里编写代码
if(interval.size()==0 | | interval==null){
返回0;
}
Interval[]interArr=新的间隔[Interval.size()];
interArr=间隔。toArray(interArr);
排序(interArr,(a,b)->a.start-b.start);
PriorityQueue pq=新的PriorityQueue();
pq.add(内部资源[0]。结束);
对于(int i=1;i
我经常将此用作面试问题
简单地说,您的输出是不正确的,因为您的算法是不正确的。您基本上已经编写了一个测试用例来证明您的算法是错误的
提示,您不需要优先级队列。问题比你想象的要简单。你能解释一下确定需要多少房间的逻辑吗?是的,因此如果会议不重叠(开始时间>结束时间),那么两次会议之间只需要一个房间,但是如果重叠,至少需要两个房间。添加
(165,221)
最小的末端是221
(队列头)-还有(类)2个其他元素在221
之前开始,因此将被添加,包括(165221)
//如果没有该间隔,所有间隔都会被添加,因为start
总是小于第一个end
,这是有意义的。我不明白为什么算法是不正确的。