题解 | #牛舍扩建#

牛舍扩建

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

知识点

遍历,合并区间

解题思路

题目要求是合并两个区间,首先,我们可以将新区间之前的不重叠区间添加到结果列表中。然后,合并重叠的区间并更新新区间的起始和结束时间。最后,将合并后的新区间和剩余的不重叠区间添加到结果列表中,并返回合并后的区间列表。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals int整型二维数组
     * @param new_interval int整型一维数组
     * @return int整型二维数组
     */
    public int[][] insertNewInterval (int[][] intervals, int[] new_interval) {
        // write code here
        List<int[]> merged = new ArrayList<>();
        int i = 0;
        // 将新区间之前的不重叠区间添加到结果列表中
        while (i < intervals.length && intervals[i][1] < new_interval[0]) {
            merged.add(intervals[i]);
            i++;
        }
        // 合并重叠的区间
        while (i < intervals.length && intervals[i][0] <= new_interval[1]) {
            new_interval[0] = Math.min(new_interval[0], intervals[i][0]);
            new_interval[1] = Math.max(new_interval[1], intervals[i][1]);
            i++;
        }
        // 将合并后的新区间添加到结果列表中
        merged.add(new_interval);
        // 将剩余的不重叠区间添加到结果列表中
        while (i < intervals.length) {
            merged.add(intervals[i]);
            i++;
        }
        // 转换成二维数组
        int[][] result = new int[merged.size()][2];
        for (int j = 0; j < merged.size(); j++) {
            result[j] = merged.get(j);
        }
        return result;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务