题解 | #牛舍扩建#

牛舍扩建

https://www.nowcoder.com/practice/2bb8208d18344608bc6bb19a78facad9

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param intervals int整型二维数组 
     * @param new_interval int整型一维数组 
     * @return int整型二维数组
     */
    public int[][] insertNewInterval (int[][] intervals, int[] new_interval) {
        Arrays.sort(intervals,new Comparator<int[]>(){
            public int compare(int[] o1,int[] o2){
                return o1[0] - o2[0] ; 
            } ; 
        }) ;
        int l = 0 ; 
        int r = intervals.length-1 ;
        while(l <= r){
            int mid = (l+r)/2 ; 
            if(new_interval[0] < intervals[mid][0]){
                r = mid-1 ; 
            }else{
                l = mid+1 ; 
            }
        } 
        int st = 0 ; 
        int[][] newIntervals;
        if(r >= 0 && intervals[r][1] >= new_interval[0]){
            st = r ; 
            intervals[r][1] = Math.max(new_interval[1],intervals[r][1]) ; 
            newIntervals = intervals ; 
        }else{
            newIntervals = new int[intervals.length+1][] ; 
            if(r+1 > 0){
                System.arraycopy(intervals,0,newIntervals,0,r+1); 
            }
            if(r+1 < intervals.length){
                System.arraycopy(intervals,r+1,newIntervals,r+2,intervals.length-(r+1)) ;
            }
            newIntervals[r+1] = new_interval ; 
            st = r+1 ; 
        }
        int j = st+1 ; 
        while(j < newIntervals.length){
            if(newIntervals[st][1] >= newIntervals[j][0]){
                if(newIntervals[st][1] < newIntervals[j][1]){
                    newIntervals[st][1] = newIntervals[j][1] ; 
                    j++ ; 
                    break; 
                }else{
                    j++ ; 
                }
            }else{
                break ; 
            }
        }
        int[][] ans = new int[st+1+newIntervals.length-j][] ; 
        System.arraycopy(newIntervals,0,ans,0,st+1) ;
        System.arraycopy(newIntervals,j,ans,st+1,newIntervals.length-j) ;
         
        // write code here
        return ans ; 
    }
}

二分找到对应的数组位置,放入后和后面的interval进行合并

#二分查找#
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务