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

本文共 1103 字,大约阅读时间需要 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的位置,也就是第一个大于等于输入数的位置。

 

转载地址:http://ktdrx.baihongyu.com/

你可能感兴趣的文章
假药见闻录
查看>>
几句话实现导航栏透明渐变 – iOS
查看>>
iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)
查看>>
Xamarin.iOS项目编译提示Could not AOT the assembly
查看>>
iOS利用视频做起始页
查看>>
java 读写csv
查看>>
删除反复行SQL举例
查看>>
wireshark解析自定义的protobuf协议
查看>>
react with JSX for {if…else…}
查看>>
delphi使用sqlite数据库时的中文路径问题
查看>>
解决pgpool启动报错 ifup[/sbin/ip] doesn't have setuid bit
查看>>
socket.io的websocket示例
查看>>
EXEC DTS
查看>>
c和指针 动态数组实现
查看>>
.NET下的多线程编程4-利用thread.Start()传递参数
查看>>
V4L2
查看>>
索引复制(Index Replication)
查看>>
git rerere
查看>>
【js】使用var与不使用var之间的区别
查看>>
poj1552
查看>>