博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法题——合并区间
阅读量:2344 次
发布时间:2019-05-10

本文共 1191 字,大约阅读时间需要 3 分钟。

1. 本题知识点

数组

2. 题目描述

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

3. 解题思路

  1. 对二维数组第一个元素进行排序
  2. 遍历数组,如果下一个数组第一个元素 > 当前数组第二个元素时,不用合并,反之合并。

4. 代码

public class Solution {
public int[][] merge(int[][] intervals) {
if (intervals.length == 0) {
return intervals; } // 对二维数组第一个元素进行排序 Arrays.sort(intervals, (int[] a, int[] b) -> {
return a[0] - b[0]; }); List
list = new ArrayList<>(); // 当前数组 int[] cur = intervals[0]; for (int i = 1; i < intervals.length; i++) {
// 下一个数组第一个元素 > 当前数组第二个元素时,不用合并 if (intervals[i][0] > cur[1]) {
list.add(cur); cur = intervals[i]; } else {
cur[1] = Math.max(cur[1], intervals[i][1]); } } list.add(cur); int[][] result = new int[list.size()][2]; for (int i = 0; i < result.length; i++) {
result[i] = list.get(i); } return result; }}

转载地址:http://vcjvb.baihongyu.com/

你可能感兴趣的文章
c中指针赋值为0
查看>>
c中求二维数组的行数和列数
查看>>
三目运算符跟赋值运算符的计算顺序
查看>>
elf文件与符号表
查看>>
linux net-snmp(之安装及配置)
查看>>
linux net-snmp(之android移植)
查看>>
linux net-snmp(之mib2c工具生成标量节点代码)
查看>>
linux net-snmp(之mib2c工具生成表格代码)
查看>>
扩展程序运行时的库路径
查看>>
【CUDA并行程序设计系列(4)】CUDA内存
查看>>
CPU、GPU、CUDA,CuDNN 简介
查看>>
U-boot如何引导Linux内核启动?
查看>>
程序各个段text,data,bss,stack,heap
查看>>
如何利用ROS MoveIt快速搭建机器人运动规划平台?
查看>>
catkin_make &amp;amp;catkin build
查看>>
Camera和IMU的标定过程之kalibr 源码编译
查看>>
在ubuntu下安装python的numpy和scipy模块
查看>>
Ubuntu下apt-get与pip安装命令的区别
查看>>
linux CMakeLists.txt 语法
查看>>
cmake 简介
查看>>