leetcode 56. Merge Intervals 759. Employee Free Time 不用线段树

本文介绍如何解决合并区间的问题,包括使用比较器排序和实现解决方案类。通过示例解释了如何将不相交的区间合并为最少数量的区间。

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

First, this is not a problem about segment tree. Don't be hasty before you make decisions. 

Second, the problem is how to sort. Give two ways in the following passage:

 

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
class cmp {
 public:
  bool operator()(Interval a, Interval b) {
    return a.start == b.start?(a.end < b.end):(a.start < b.start);
  }
};
class Solution {
 public:
  vector<Interval> merge(vector<Interval> &intervals) {
    // Note: The Solution object is instantiated only once and is reused by each test case.
    if (intervals.size() < 1)
      return intervals;
      
    vector<Interval> res;
    sort(intervals.begin(), intervals.end(), cmp());
    int i, j;
    Interval cur(intervals[0].start, intervals[0].end);
    for (i = 1; i < intervals.size(); ++i) {
      if (intervals[i].start > cur.end) {
        res.push_back(cur);
        cur.start = intervals[i].start;
        cur.end = intervals[i].end;
      }
      else
        cur.end = max(intervals[i].end, cur.end);
    }
    res.push_back(cur);
    return res;
  }
};

 

/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
/* 
class cmp {
 public:
  bool operator()(Interval a, Interval b) {
    return a.start == b.start?(a.end < b.end):(a.start < b.start);
  }
};
*/
bool operator<(Interval a, Interval b) {
  return a.start == b.start?(a.end < b.end):(a.start < b.start);
}
class Solution {
 public:

  vector<Interval> merge(vector<Interval> &intervals) {
    // Note: The Solution object is instantiated only once and is reused by each test case.
    if (intervals.size() < 1)
      return intervals;
      
    vector<Interval> res;
    sort(intervals.begin(), intervals.end());
    int i, j;
    Interval cur(intervals[0].start, intervals[0].end);
    for (i = 1; i < intervals.size(); ++i) {
      if (intervals[i].start > cur.end) {
        res.push_back(cur);
        cur.start = intervals[i].start;
        cur.end = intervals[i].end;
      }
      else
        cur.end = max(intervals[i].end, cur.end);
    }
    res.push_back(cur);
    return res;
  }
};

Python Version:


class Solution:
    def cmp(self, lst):
        return lst[0]

    def merge(self, intervals):
        res = []
        intervals.sort(key=self.cmp, reverse=False)
        ilen = len(intervals)
        if (intervals):
            cur = [intervals[0][0], intervals[0][1]]
            for i in range(1, ilen):
               if (intervals[i][0] <= cur[1]):
                   cur[1] = max(intervals[i][1], cur[1])
               else:
                   res.append(cur)
                   cur=[intervals[i][0],intervals[i][1]]
            res.append(cur)
        return res

--------------------------------------------------------------------------------------------------------------

We are given a list schedule of employees, which represents the working time for each employee.

Each employee has a list of non-overlapping Intervals, and these intervals are in sorted order.

Return the list of finite intervals representing common, positive-length free time for all employees, also in sorted order.

(Even though we are representing Intervals in the form [x, y], the objects inside are Intervals, not lists or arrays. For example, schedule[0][0].start = 1schedule[0][0].end = 2, and schedule[0][0][0] is not defined).  Also, we wouldn't include intervals like [5, 5] in our answer, as they have zero length.

 

Example 1:

Input: schedule = [[[1,2],[5,6]],[[1,3]],[[4,10]]]
Output: [[3,4]]
Explanation: There are a total of three employees, and all common
free time intervals would be [-inf, 1], [3, 4], [10, inf].
We discard any intervals that contain inf as they aren't finite.

Example 2:

Input: schedule = [[[1,3],[6,7]],[[2,4]],[[2,5],[9,12]]]
Output: [[5,6],[7,9]]

 

Constraints:

  • 1 <= schedule.length , schedule[i].length <= 50
  • 0 <= schedule[i].start < schedule[i].end <= 10^8

 

"""
# Definition for an Interval.
class Interval:
    def __init__(self, start: int = None, end: int = None):
        self.start = start
        self.end = end
"""

class Solution:
    def employeeFreeTime(self, schedule: '[[Interval]]') -> '[Interval]':
        candidates,res = [],[]
        for employee in schedule:
            for inter in employee:
                candidates.append([inter.start,inter.end]) #bug2: candidates.append((inter.start,inter.end))
        candidates.sort()
        l = len(candidates)
        merged = [candidates[0]]
        for i in range(1,l):
            cur,top = candidates[i],merged[-1]
            if (cur[0] <= top[1]):
                merged[-1][1] = max(cur[1],merged[-1][1]) #bug1: merged[-1][1] = cur[1]
            else:
                merged.append(cur)
        ml = len(merged)
        if (ml == 1):
            return res
        for i in range(1,ml):
            res.append(Interval(merged[i-1][1],merged[i][0]))
        return res

 

 

AI 代码审查Review工具 是一个旨在自动化代码审查流程的工具。它通过集成版本控制系统(如 GitHub 和 GitLab)的 Webhook,利用大型语言模型(LLM)对代码变更进行分析,并将审查意见反馈到相应的 Pull Request 或 Merge Request 中。此外,它还支持将审查结果通知到企业微信等通讯工具。 一个基于 LLM 的自动化代码审查助手。通过 GitHub/GitLab Webhook 监听 PR/MR 变更,调用 AI 分析代码,并将审查意见自动评论到 PR/MR,同时支持多种通知渠道。 主要功能 多平台支持: 集成 GitHub 和 GitLab Webhook,监听 Pull Request / Merge Request 事件。 智能审查模式: 详细审查 (/github_webhook, /gitlab_webhook): AI 对每个变更文件进行分析,旨在找出具体问题。审查意见会以结构化的形式(例如,定位到特定代码行、问题分类、严重程度、分析和建议)逐条评论到 PR/MR。AI 模型会输出 JSON 格式的分析结果,系统再将其转换为多条独立的评论。 通用审查 (/github_webhook_general, /gitlab_webhook_general): AI 对每个变更文件进行整体性分析,并为每个文件生成一个 Markdown 格式的总结性评论。 自动化流程: 自动将 AI 审查意见(详细模式下为多条,通用模式下为每个文件一条)发布到 PR/MR。 在所有文件审查完毕后,自动在 PR/MR 中发布一条总结性评论。 即便 AI 未发现任何值得报告的问题,也会发布相应的友好提示和总结评论。 异步处理审查任务,快速响应 Webhook。 通过 Redis 防止对同一 Commit 的重复审查。 灵活配置: 通过环境变量设置基
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器的状态空间平均模型的建模策略。该方法通过数学建模手段对直流微电网系统进行精确的状态空间描述,并对其进行线性化处理,以便于系统稳定性分析与控制器设计。文中结合Matlab代码实现,展示了建模与仿真过程,有助于研究人员理解和复现相关技术,推动直流微电网系统的动态性能研究与工程应用。; 适合人群:具备电力电子、电力系统或自动化等相关背景,熟悉Matlab/Simulink仿真工具,从事新能源、微电网或智能电网研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网的动态建模方法;②学习DC-DC变换器在耦合条件下的状态空间平均建模技巧;③实现系统的线性化分析并支持后续控制器设计(如电压稳定控制、功率分配等);④为科研论文撰写、项目仿真验证提供技术支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐步实践建模流程,重点关注状态变量选取、平均化处理和线性化推导过程,同时可扩展应用于更复杂的直流微电网拓扑结构中,提升系统分析与设计能力。
内容概要:本文介绍了基于物PINN驱动的三维声波波动方程求解(Matlab代码实现)理信息神经网络(PINN)求解三维声波波动方程的Matlab代码实现方法,展示了如何利用PINN技术在无需大量标注数据的情况下,结合物理定律约束进行偏微分方程的数值求解。该方法将神经网络与物理方程深度融合,适用于复杂波动问题的建模与仿真,并提供了完整的Matlab实现方案,便于科研人员理解和复现。此外,文档还列举了多个相关科研方向和技术服务内容,涵盖智能优化算法、机器学习、信号处理、电力系统等多个领域,突出其在科研仿真中的广泛应用价值。; 适合人群:具备一定数学建模基础和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事计算物理、声学仿真、偏微分方程数值解等相关领域的研究人员; 使用场景及目标:①学习并掌握PINN在求解三维声波波动方程中的应用原理与实现方式;②拓展至其他物理系统的建模与仿真,如电磁场、热传导、流体力学等问题;③为科研项目提供可复用的代码框架和技术支持参考; 阅读建议:建议读者结合文中提供的网盘资源下载完整代码,按照目录顺序逐步学习,重点关注PINN网络结构设计、损失函数构建及物理边界条件的嵌入方法,同时可借鉴其他案例提升综合仿真能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值