携程区间合并题目

给了已知的n个任务的工作区间,寻找能够至少给这个n个任务提供服务的服务者数量。
比如有个任务在(0, 10)时间段内需要一个服务者,当新的任务是(20, 30)时两者是不冲突的,这样一个服务者就足够了。在编程的时候应该注意,在某个时刻可能会有多个空闲服务者,当确定当前所有服务者都被使用的时候才能要求增加一位新的服务者。

class Op_Xiecheng{
    public int getnum(int [][]logs){
        if(logs.length<2){
            return logs.length;   // 这里主要是排除掉空输入和单个输入
        }
        List<Interval> pre = new ArrayList<>();
        Interval int_0 = new Interval(logs[0][0], logs[0][1]);
        pre.add(int_0);
        int num = 1; //此时至少需要一个服务者
        for(int i=1;i<logs.length;i++){
            Interval temp = new Interval(logs[i][0],logs[i][1]);
            int ye_cr = 0; //确定与之前正在工作的区间有交叉的区间数目
            for(int j =0;j<pre.size();j++){
                if(!judge(pre.get(j), temp)){
                    pre.set(j, temp);  //发现一个空闲的服务者,则使用之并给他新的工作区间
                    break;
                }else {
                    ye_cr += 1; 
                }
            }
            if(ye_cr==pre.size()){  //只有所有的服务者都在工作时才需要引入新的服务者
                num+=1;
                pre.add(temp);
            }
        }
        return num;
    }

    public boolean judge(Interval a, Interval b){  //判断是否有交叉
        if(a.start<b.end&&a.end>b.start){
            return true;
        }else
            return false;
    }

}
/*
区间类
 */
class Interval {
   int start;
   int end;
    Interval() { start = 0; end = 0; }
   Interval(int s, int e) { start = s; end = e; }
}

当然最后因为一些原因没有赶上提交,因此代码可能(大概率)还是有问题,希望各位大佬指导一下。

你可能感兴趣的:(leetCode,刷题)