Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么下面的测试用例的代码输出是3?_Java_Sorting_Priority Queue - Fatal编程技术网

Java 为什么下面的测试用例的代码输出是3?

Java 为什么下面的测试用例的代码输出是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

我的编码问题与计算给定排程时间的最小房间数有关

给定一系列会议时间间隔,包括开始和结束时间[[s1,e1],[s2,e2],…](si 这是我正在尝试解决的测试用例:[(65424),(351507),(314807),(387722),(19797),(259722),(165221)]

输出应该是6,但我的代码返回3,我不知道为什么

当我运行这个测试用例时,[(65424),(351507),(314807),(387722),(19797),(259722)],我的解决方案打印6,然而,只要我添加(165221),解决方案打印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();
    }
}

``
/**
*间隔的定义:
*公共类间隔{
*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
,这是有意义的。我不明白为什么算法是不正确的。