当前位置: 首页 > news >正文

Day27.

leetcode 646.最长数对链

给你一个由 n 个数对组成的数对数组 pairs ,其中 pairs[i] = [lefti, righti]lefti < righti

现在,我们定义一种 跟随 关系,当且仅当 b < c 时,数对 p2 = [c, d] 才可以跟在 p1 = [a, b] 后面。我们用这种形式来构造 数对链

找出并返回能够形成的 最长数对链的长度

你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。

示例 1:

输入:pairs = [[1,2], [2,3], [3,4]]
输出:2
解释:最长的数对链是 [1,2] -> [3,4] 。

示例 2:

输入:pairs = [[1,2],[7,8],[4,5]]
输出:3
解释:最长的数对链是 [1,2] -> [4,5] -> [7,8] 。

贪心算法:

挑选最长数对链的第一个数对时,最优的选择是挑选第二个数最小的数对,以此类推。

代码:

class Solution {
public:
    int findLongestChain(vector<vector<int>>& pairs) {
          sort(pairs.begin(), pairs.end(), [](const vector<int>& a, const vector<int>& b) {
            return a[1] < b[1];
        });

        int count = 1;
        int end = pairs[0][1];

        for (int i = 1; i < pairs.size(); ++i) {
            if (pairs[i][0] > end) {
                count++;
                end = pairs[i][1];
            }
        }

        return count;
    }
};
代码逻辑:
1. 排序:
sort(pairs.begin(), pairs.end(), [](const vector<int>& a, const vector<int>& b) {
            return a[1] < b[1];
        });
  • 按照数对的第二个元素升序排序。

  • 示例:

    • 排序前:pairs = [[1, 2], [4, 5], [2, 3]]
    • 排序后:pairs = [[1, 2], [2, 3], [4, 5]]
2. 初始化:
int count = 1;
int end = pairs[0][1];
  • count:记录当前数对链长度,初始值为1。
  • end:记录当前数对链最后一个数对的第二个值,初始值为第一个数对的结束值。
3. 遍历数对:
for (int i = 1; i < pairs.size(); ++i) {
    if (pairs[i][0] > end) {
        count++;
        end = pairs[i][1];
    }
}
  • 从第二个数对开始,如果当前数对的开始值pairs[i][0]大于end,说明可以接在后面。
  • count加1,更新end为当前数对的结束值pairs[i][1]
4. 返回结果:
return count;
  • 返回数对链的长度。
http://www.dtcms.com/a/18806.html

相关文章:

  • 浅聊MQ之Kafka、RabbitMQ、ActiveMQ、RocketMQ持久化策略
  • Tomcat的升级
  • 跟着ai辅助学习vue3
  • 【C++】IO流
  • Kubernetes控制平面组件:etcd(二)
  • 播客自动化实操:用Make自动制作每日新闻播客
  • Java每日精进·45天挑战·Day19
  • 嵌入式 Linux 驱动开发:点灯大法
  • SpringBoot中使用MyBatis-Plus详细介绍
  • C++ 网络编程
  • 安卓逆向(签名校验)
  • SQL 注入漏洞原理以及修复方法
  • 开源语音克隆项目 OpenVoice V2 本地部署
  • 数据治理常用的开源项目有哪些?
  • CAS单点登录(第7版)2.规划
  • 数据结构与算法之排序算法-(计数,桶,基数排序)
  • 阿里云上线 DeepSeek,AI 领域再掀波澜
  • UE C++ UObject 功能的初步总结
  • 工作室如何实现一机一IP
  • moveable 一个可实现前端海报编辑器的 js 库
  • 进阶关卡 - 第4关 - InternVL 多模态模型部署微调实践
  • 第二月:学习 NumPy、Pandas 和 Matplotlib 是数据分析和科学计算的基础
  • CAS单点登录(第7版)7.授权
  • flv实时监控视频
  • Linux网络 | 多路转接selec
  • 基于web的留守儿童网站的设计与实现
  • 【C/C++】C++ Vector容器核心操作指南:增删改查全面解析
  • Kubernetes:容器编排的革命与未来
  • 领域模型:驱动软件进化的战略核心与实践指南
  • 如何让内网下其他主机直接通过 ip 访问docker overlay 网段下对应容器?