Dynamic Programming | Set 20 (Maximum Length Chain of Pairs)
You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.A pair (c, d) can follow another pair (a, b) if b < c. Chain of pairs can be formed in this fashion. Find the longest
chain which can be formed from a given set of pairs.
Source:Amazon Interview | Set 2
For example, if the given pairs are {{5, 24}, {39, 60}, {15, 28}, {27, 40}, {50, 90} }, then the longest chain that can be formed is of length 3, and the chain is {{5, 24}, {27, 40}, {50, 90}}
This problem is a variation of standardLongest Increasing Subsequenceproblem. Following is a simple two step process.
1) Sort given pairs in increasing order of first (or smaller) element.
2) Now run a modified LIS process where we compare the second element of already finalized LIS with the first element of new LIS being constructed.
http://www.geeksforgeeks.org/dynamic-programming-set-20-maximum-length-chain-of-pairs/
本博客贴出动态规划法解和贪心法的程序。
动态规划法的时间效率是O(n*n);
而贪心法的效率是O(nlgn),主要是因为sort需要O(nlgn)的时间效率,而贪心法本身只需要O(n).
// Structure for a pair
struct pairChain
{
int a;
int b;
};
// This function assumes that arr[] is sorted in increasing order
// according the first (or smaller) values in pairs.
int maxChainLengthDP( struct pairChain arr[], int n)
{
if (n < 2) return n;
int *A = new int[n];
A[0] = 1;
int max_len = 0;
for (int i = 1; i < n; i++)
{
for (int j = 0; j < i; j++)
{
A[i] = 1;
if (arr[i].a > arr[j].b) A[i] = A[i] < A[j]+1? A[j]+1:A[i];
max_len = max_len < A[i]? A[i]:max_len;
}
}
return max_len;
}
bool operator<(pairChain p1, pairChain p2)
{
return p1.b < p2.b;
}
#include<algorithm>
int maxChainLengthGreedy( struct pairChain arr[], int n)
{
if (n < 2) return n;
std::sort(arr, arr+n);
int max_len = 1;
int active_p = 0;
for (int i = 1; i < n; i++)
{
if (arr[i].a > arr[active_p].b)
{
max_len++;
active_p = i;
}
}
return max_len;
};
分享到:
相关推荐
极客换极客 Geeks-For-Geeks 实习文章 使用 scapy 嗅探数据包 - 使用 Javascript 和 DOM 创建棋盘模式 - 如何将链接从一个 iframe 加载到另一个 iframe -
首先,从标题和描述中,我们可以了解到这是关于一个在线IT资源平台geeksforgeeks上关于C++编程语言的学习内容和经验分享。从“标题”中我们得知这是一个专门讨论C++的资源集合,而“描述”部分则是一个学习者的个人...
《C++解题指南:Geeks-for-Geeks问题解决方案详解》 在编程的世界里,Geeks-for-Geeks(GFG)是一个备受推崇的学习平台,尤其对于初学者和有经验的开发者来说,这里提供了丰富的算法和数据结构题目。本资料包"geeks...
【Geeks-Studio-crx插件】是一款专为英语用户设计的浏览器扩展程序,它能够帮助用户在特定的网页操作中触发预设的行为,比如自动打开新的URL链接。这款插件主要适用于那些需要频繁在两个或多个网站之间切换的用户,...
Linux For Non-Geeks - A Hands-On, Project-Based, Take-It-Slow Guidebook 2004
**Chennai Geeks Chrome App-crx插件**是一款专为Chennai Geeks社区设计的浏览器扩展,由开发者ZathraC精心打造。该插件的主要功能是为用户提供方便快捷的途径,无论何时何地,都能轻松接入Chennai Geeks的在线资源...
样本AEM项目模板 这是基于AEM的应用程序的项目模板。 它旨在作为最佳实践示例集,也是开发您自己的功能的潜在起点。 模组 模板的主要部分是: 核心:包含所有核心功能(例如OSGi服务,侦听器或调度程序)以及与组件...
以团队形式建立网站(Git合作) 在开发典型网站时,练习您在GIT中的技能。 每个学生在网站的不同部分使用不同的文件工作,并且最高年级的学生可以担任团队负责人(用于集成和部署),除非老师更愿意成为整个班级的...
COMO INICIAR 克雷尔埃尔恩托尔诺 pipenv shell 安装依赖 pipenv install 克雷拉迁徙 pipenv run init pipenv run migrate pipenv run upgrade Ejecutar la API pipenv run start ... - Cambiar la variable @...
带有React JS的WebApp样板 要求: 确保您使用的是节点版本10 安装软件包: $ npm install 创建一个.env文件: $ cp .env.example .env 开始编码! 以及具有实时重新加载功能的webpack开发服务器(适用于Windows...
### Ubuntu Linux for Non-Geeks:重要知识点概览 #### 一、书籍基本信息与版权说明 - **书名**:《Ubuntu Linux for Non-Geeks》 - **作者**:Rickford Grant - **出版社**:No Starch Press - **出版地**:美国...
面试时,面试官可能会从多个方面考察候选人的 Java 技能,包括基础语法、类、对象、变量、字符串处理、多线程、面向对象概念、异常处理、集合框架等。 1. **Java 基础**: - Java 是一种静态类型的、解释型的、跨...
### Ubuntu for Non-Geeks (Fourth Edition):一本无痛高效指南 #### 书籍概览 《Ubuntu for Non-Geeks》(第四版)是一本针对Ubuntu新手的实用指南,旨在帮助那些对技术不太熟悉的用户轻松掌握Ubuntu操作系统。...
《Geeks Artificial Neural Network-开源:构建新一代智能平台》 在信息技术飞速发展的今天,人工智能(AI)已经成为引领未来的主导力量。其中,人工神经网络(Artificial Neural Networks,简称ANN)作为AI的核心...
标题中的“geeks文档.doc”和描述中的“geek极客们都用什么神器,这篇文章给了你答案。”都指向了一个主题:探讨极客们使用的高效工具,即“神器”。标签中的“geek 极客 神器”进一步确认了这个话题,我们将重点...
访问钦奈极客在旅途中。由ZathraC开发 除了钦奈极客网页,您可以通过此扩展程序访问群发邮件。 支持语言:English
《Geeks3D Furmark:全面解析OpenGL显卡基准测试工具》 Geeks3D Furmark,这是一款专为评测显卡性能而设计的OpenGL基准测试工具,它由知名技术团队Geeks3D开发,旨在为用户提供准确且全面的显卡性能评估。V1.17.1的...
文件名称 "Russian-Geeks-responsive-landding_HTML-CSS-SASS-JS-Bootstrap-4-main" 暗示了项目的主要代码和资源可能包含在该目录下,其中可能有HTML文件、SASS或CSS文件、JavaScript脚本以及可能的图片和其他媒体...
关于网络游戏和极客的最新的链接。玩家的必须 简单而美丽。通过网络为您带来最新的游戏新闻,评论,视频和互动。... Geeks Fest将替换您的默认标签,它将成为您的主页,所以您不要不要错过任何东西。 支持语言:English
语言:English 游戏和怪物的最新鲜链接,来自网络。 游戏玩家必须 简单而美丽。 从网络上带来最新鲜的游戏新闻,评论,视频和交互式。 所有的游戏和极客都需要。 在那里享受最鼓舞人心的东西。 永远不要错过下一个...