LeetCode 354. Russian Doll Envelopes
2016-06-29 00:55
369 查看
题目链接:https://leetcode.com/problems/russian-doll-envelopes/
每个洋娃娃有两个维度,长和宽,只有两者都比另外一个洋娃娃的对应维度大,才能够装另外一个。
这个问题其实就是LIS。
朴素的做法直接排序之后O(n^2)去dp一下,那么既然问题可以规约到LIS,必然是可以O(nlogn)处理的。
排序的时候,一个维度比如w,按照从小到大排,这个是第一顺序,另一个维度h按照从大到小排,这个是第二顺序。
原因就是w相同的娃娃,不能嵌套,所以h在w相同情况下,按照从大到小排,可以保证不会出现w相同娃娃互相嵌套的情况。
那么这个时候问题的答案其实就是所有的h值组成的数列的LIS大小了。
Java中,我没找到类似于C++的可以在数组上做lower_bound的API,所以只能手写一个lower_bound了。
View Code
-----------------------------------------------------------------------------------------------------------------------------
话说,我觉得写LeetCode的题解好像看的人比CF、TC或者其他一些OJ的人多不知道多少个数量级哎。
每个洋娃娃有两个维度,长和宽,只有两者都比另外一个洋娃娃的对应维度大,才能够装另外一个。
这个问题其实就是LIS。
朴素的做法直接排序之后O(n^2)去dp一下,那么既然问题可以规约到LIS,必然是可以O(nlogn)处理的。
排序的时候,一个维度比如w,按照从小到大排,这个是第一顺序,另一个维度h按照从大到小排,这个是第二顺序。
原因就是w相同的娃娃,不能嵌套,所以h在w相同情况下,按照从大到小排,可以保证不会出现w相同娃娃互相嵌套的情况。
那么这个时候问题的答案其实就是所有的h值组成的数列的LIS大小了。
Java中,我没找到类似于C++的可以在数组上做lower_bound的API,所以只能手写一个lower_bound了。
public class Solution { public int maxEnvelopes(int[][] envelopes) { Arrays.sort(envelopes, (x, y) -> (x[0] == y[0] ? y[1] - x[1] : x[0] - y[0])); int n = envelopes.length; int[] dp = new int ; Arrays.fill(dp, Integer.MAX_VALUE); for (int i = 0; i < n; i++) { int index = lower_bound(dp, envelopes[i][1]); dp[index] = envelopes[i][1]; } return lower_bound(dp, Integer.MAX_VALUE); } private int lower_bound(int[] dp, int target) { int n = dp.length; int l = 0, r = n; while (l < r) { int m = l + r >>> 1; if (dp[m] < target) { l = m + 1; } else { r = m; } } return l; } }
View Code
-----------------------------------------------------------------------------------------------------------------------------
话说,我觉得写LeetCode的题解好像看的人比CF、TC或者其他一些OJ的人多不知道多少个数量级哎。
相关文章推荐
- Unable to establish loopback connection解决方法
- Android学习网站收集
- shell 编程基础
- linux常用命令
- 【Linux命令】进程前后台切换bg、fg
- shell中的条件判断
- linux ioctl 控制字
- web项目无法部署到eclipse配置的本地tomcat
- linux 命令与文件的查询
- nginx启动、重启、关闭
- 关于PHP和apache的配置
- centos系统中的root用户下的文件不小心删除了而且当时只创建了一个root用户,这个怎么恢复?
- log4j.properties配置总结
- linux下为php5.3安装Imagick扩展
- apache 禁止目录浏览(list)
- Apache 及开启压缩及Header信息隐藏
- shell 获取系统时间
- ESXI 5.0 linux虚拟机LVM磁盘扩容
- centos 修改主机名立即生效和重启后也生效的方法
- ThinkPHP 在nginx环境下去掉URL中的index.php