Java 题解 | #牛舍扩建#
牛舍扩建
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) { // write code here List<int[]> res = new ArrayList<>(); int n = intervals.length; int i = 0; // 将左边界小于新区间左边界的区间直接加入res while (i < n && intervals[i][1] < new_interval[0]) { res.add(intervals[i]); i++; } // 更新新区间的左边界和右边界 while (i < n && 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++; } // 将更新后的新区间加入res res.add(new_interval); // 将右边界大于新区间右边界的区间加入res while (i < n) { res.add(intervals[i]); i++; } int[][] result = new int[res.size()][2]; for (int j = 0; j < res.size(); j++) { result[j] = res.get(j); } return result; } }
编程语言是Java。
该题考察的知识点是合并区间。
这段代码实现了将新区间插入到二维整数数组中的功能。给定一个二维整数数组int[][] intervals
,表示一组已排序且不重叠的区间,和一个一维整数数组int[] new_interval
,表示一个新的区间,要求将新区间插入到已有的区间列表中,并保持区间有序且不重叠。
代码中的解决方法是使用两个指针i
和j
来遍历已有的区间和新区间。首先,将左边界小于新区间左边界的已有区间直接加入结果列表res
中。然后,更新新区间的左边界和右边界。遍历已有区间列表,如果当前区间的右边界大于等于新区间的左边界,则更新新区间的左边界和右边界为已有区间和新区间的最小和最大值。最后,将更新后的新区间加入结果列表res
中。最后,将右边界大于新区间右边界的已有区间也加入结果列表res
中。
将结果列表res
转换为二维整数数组int[][] result
,并作为结果返回。