lintcode题目记录4


本文摘自php中文网,作者PHP中文网,侵删。

Russian Doll Envelopes

俄罗斯玩偶嵌套问题,这个是典型的dp问题···强行遍历会提示超时,然而整了好久也没整明白怎么整,网上搜了下 把问题归结为求最长递增子序列问题··然而本人愚钝还是想不明白为啥可以这样做··虽然出来的结果是对的·····

先把数据排序, 用python内建的排序函数进行排序,但是因为当x相等时,y要按从大到小拍,所以要传一个cmp进去,python3.x不支持cmp了 所以 用了一个转换,转换成key,如果直接key设置为x默认y会按从小到大拍

这样算的结果是对的·但是那个迭代的dp不是一个有效的序列···但是长度是对的···

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<span style="color: #0000ff">class</span><span style="color: #000000"> Solution:

    </span><span style="color: #008000">#</span><span style="color: #008000"> @param {int[][]} envelopes a number of envelopes with widths and heights</span>

    <span style="color: #008000">#</span><span style="color: #008000"> @return {int} the maximum number of envelopes</span>

    <span style="color: #0000ff">def</span><span style="color: #000000"> maxEnvelopes(self, envelopes):

        </span><span style="color: #008000">#</span><span style="color: #008000"> Write your code here</span>

        <span style="color: #0000ff">import</span><span style="color: #000000"> functools

        nums </span>= sorted(envelopes,key= functools.cmp_to_key(<span style="color: #0000ff">lambda</span> x,y:x[0]-y[0] <span style="color: #0000ff">if</span> x[0] != y[0] <span style="color: #0000ff">else</span> y[1] - x[1<span style="color: #000000">]))

        size </span>=<span style="color: #000000"> len(nums)

        dp </span>=<span style="color: #000000"> []

        </span><span style="color: #0000ff">for</span> x <span style="color: #0000ff">in</span><span style="color: #000000"> range(size):

            low, high </span>= 0, len(dp) - 1

            <span style="color: #0000ff">while</span> low <=<span style="color: #000000"> high:

                mid </span>= (low + high)//2

                <span style="color: #0000ff">if</span> dp[mid][1] < nums[x][1<span style="color: #000000">]:

                    low </span>= mid + 1

                <span style="color: #0000ff">else</span><span style="color: #000000">:

                    high </span>= mid - 1

            <span style="color: #0000ff">if</span> low <<span style="color: #000000"> len(dp):

                dp[low] </span>=<span style="color: #000000"> nums[x]

            </span><span style="color: #0000ff">else</span><span style="color: #000000">:

                dp.append(nums[x])

        </span><span style="color: #0000ff">return</span> len(dp)

 

以上就是lintcode题目记录4的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

什么是Pythontry-finally 语句?它能起到什么样的作用?

Python中排列组合计算操作的实现示例

登录接口

现在学Python能做什么?学完Python可以当黑客吗

Python怎么查看安装的模块有哪些

pycharm怎么汉化

Python之禅怎么打出来

对numpy 数组和矩阵的乘法的进一步理解

老男孩Python高级运维实战精品进阶视频教程的资源分享

Python如何读取sqlite数据库的文件?

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...