小学生都能看懂的题解 | #合并区间#

合并区间

https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a

方案解释:

  1. 什么是区间? 区间就像一个范围,比如 [10, 30] 表示从 10 到 30 之间的所有数字。

  2. 我们的目标:我们要把给定的一些可能有重叠的区间合并成更大的区间。例如,如果我们有两个区间 [10, 30][20, 60],因为它们有重叠部分(从 20 到 30),所以我们可以把它们合并成 [10, 60]

  3. 步骤

    • 排序:首先,我们把所有的区间按起始数字从小到大排序。这样,重叠的区间就会放在一起。
    • 合并:然后,从第一个区间开始,检查每个区间:
      • 如果当前区间的结束数字大于或等于下一个区间的起始数字,就说明这两个区间有重叠,我们就合并它们。
      • 如果没有重叠,我们就把当前区间放到结果中,并开始检查下一个区间。

代码解释:

以下是这个方法的代码结构,简化了部分细节来便于理解:

import java.util.ArrayList;
import java.util.Collections;

class Interval {
    int start;
    int end;

    Interval(int start, int end) {
        this.start = start;
        this.end = end;
    }
}

public class IntervalMerger {
    public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
        // 1. 如果没有区间,直接返回一个空的列表
        if (intervals.size() == 0) {
            return new ArrayList<Interval>();
        }

        // 2. 按照区间的起始值排序
        Collections.sort(intervals, (a, b) -> a.start - b.start);

        // 3. 创建一个新的列表来存放合并后的区间
        ArrayList<Interval> merged = new ArrayList<>();
        Interval currentInterval = intervals.get(0); // 从第一个区间开始

        // 4. 遍历所有区间
        for (int i = 1; i < intervals.size(); i++) {
            // 5. 如果当前区间和下一个区间重叠
            if (currentInterval.end >= intervals.get(i).start) {
                // 合并这两个区间
                currentInterval.end = Math.max(currentInterval.end, intervals.get(i).end);
            } else {
                // 如果没有重叠,把当前区间加入结果
                merged.add(currentInterval);
                currentInterval = intervals.get(i); // 更新当前区间
            }
        }

        // 6. 添加最后一个合并的区间
        merged.add(currentInterval);

        return merged; // 返回合并后的区间
    }
}

代码分解:

  1. 导入和定义

    • 我们引入了一些工具,然后定义了一个 Interval 类,里面有两个数字 startend,表示区间的起始和结束。
  2. 方法开始

    • merge 方法接收一个区间的列表 intervals
  3. 检查空列表

    • 如果没有区间,就返回一个空的列表。
  4. 排序

    • 我们把所有区间按起始值从小到大排序,这样重叠的区间会在一起。
  5. 合并逻辑

    • 创建一个新的列表 merged 来存放合并后的区间。
    • 从第一个区间开始,逐个检查后面的区间:
      • 如果当前区间和下一个区间重叠,我们就合并它们(更新结束值)。
      • 如果没有重叠,就把当前区间加入结果列表,继续检查下一个区间。
  6. 结束添加

    • 在所有区间检查完后,别忘了把最后一个合并的区间也加入结果。
  7. 返回结果

    • 最后,返回合并后的区间列表。

希望这篇文章对你有帮助👍。

#牛客创作赏金赛##题解#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

昨天 14:22
门头沟学院 Java
大厂 测开 24*16离家近的事业编(大概只有大厂的1/4) 硕士
点赞 评论 收藏
分享
牛客722552937号:新锐之星有点坑爹,特别是对男的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务