博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
包信封问题 以及 最长有序子序列问题
阅读量:6577 次
发布时间:2019-06-24

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

https://leetcode.com/problems/russian-doll-envelopes/?tab=Description

包信封问题,可以转化成最长有序子序列问题,见下面的分析:

https://discuss.leetcode.com/topic/47469/java-nlogn-solution-with-explanation/2

尤其是其中第二部分C++的解法。

 

而最长有序子序列问题:

https://leetcode.com/problems/longest-increasing-subsequence/?tab=Description

 

非常经典,是可以有O(nlgn)的解法的:

解法在上面那道题目的解法里面也有体现。实现如下:

 

class Solution {public:    static bool cmp_first(const pair
& i, const pair
& j) { if (i.first == j.first) return i.second > j.second; return i.first < j.first; } int maxEnvelopes(vector
>& envelopes) { vector
candidates; sort(envelopes.begin(), envelopes.end(), cmp_first); vector
dp; for (int i = 0; i < envelopes.size(); ++i) { auto itr = lower_bound(dp.begin(), dp.end(), envelopes[i].second); if (itr == dp.end()) { dp.push_back(envelopes[i].second); } else { *itr = envelopes[i].second; } } return dp.size(); }};

其中用到了 lower_bound,这个函数的含义,找出本身作为lower_bound的位置,也就是第一个大于等于输入数的位置。

 

转载于:https://www.cnblogs.com/charlesblc/p/6443467.html

你可能感兴趣的文章
Java中list在循环中删除元素的坑
查看>>
[转]100个常用的linux命令
查看>>
cocos creator destroy方法
查看>>
第二课 HTML+CSS
查看>>
time random sys os模块
查看>>
第一章 台达组态软件的基本介绍
查看>>
DOM_04之常用对象及BOM
查看>>
LOJ#2085 循环之美
查看>>
Leetcode | Longest Common Prefix
查看>>
Filter实现用户自动登录
查看>>
第十九天笔记
查看>>
发送json给服务器
查看>>
日历控件datetimepicker(IE11)
查看>>
RH253读书笔记(5)-Lab 5 Network File Sharing Services
查看>>
CCNP路由实验(4) -- BGP
查看>>
图像卷积与滤波的一些知识点
查看>>
关于 tchart 控件的相关内容
查看>>
(转)新的挑战:敏捷开发与优秀的程序员
查看>>
JS xpath
查看>>
关于 spring MVC 配置自动扫描中 use-default-filters 属性
查看>>