我的编码问题与计算预定时间表的最小房间数有关
给定一个由开始和结束时间[[s1,e1],[s2,e2],...]组成的会议时间间隔数组(si 这是我正在尝试解决的测试用例:[(65,424),(351,507),(314,807),(387,722),(19,797),(259,722),(165,221)]] 输出应该为6,但是我的代码返回3,但我不确定为什么。 [当我运行此测试用例时,[(65,424),(351,507),(314,807),(387,722),(19,797),(259,722)],我的解决方案会打印6,但是我加(165,221) ,解决方案将打印3。 ``代码如下:/**
*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();
}
}
``
我经常以此为面试问题。
简单地说,您的输出不正确因为您的算法不正确。您基本上已经编写了一个测试案例,证明demonstrates您的算法不正确。
提示,您不需要优先级队列。这个问题比您想象的要简单。