博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】354. Russian Doll Envelopes
阅读量:6657 次
发布时间:2019-06-25

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

题目如下:

解题思路:本题有两个维度(宽和高),必须两个维度同时满足条件才行。我们可以把输入数组按其中一个维度排序,例如按宽从小到大排序,如果宽相等,再比较高。这样的话,对于数组中任意一个元素(信封),能够放入该信封的其他信封一定在该信封所在位置的左边。接下来从头开始遍历数组,因为宽度是递增的,因此我们只需要考虑信封的高度,同时我们可以用字典dic[i] = minHeight保存可以放入i个信封的最小高度。对于任意一个信封,只要按key从大到小的顺序比较dic,找到key最大并且其信封高度大于dic[i]即表示这个信封能放入(i)个信封,并且同时更新dic[i+1] = min(dic[i+1],当前信封高度)。这里有一个要注意的是,信封宽度存在相等的情况,而宽度相同的信封是无法互相放入的。因此在更新dic[i+1] = min(dic[i+1],当前信封高度)的时候,需要要先一个holdlist保存要更新的所有数组,只有在当前信封的宽度和下一个信封宽度不相同的时候,才做批量更新。

代码如下:

class Solution(object):    def maxEnvelopes(self, envelopes):        """        :type envelopes: List[List[int]]        :rtype: int        """        if len(envelopes) == 0:            return 0        def cmpf_w(v1, v2):            if v1[0] != v2[0]:                return v1[0] - v2[0]            return v1[1] - v2[1]        envelopes.sort(cmp=cmpf_w)        res = 1        holdlist = []        dic = {}        for i in range(len(envelopes)):            flag = False            for j in range(res,-1,-1):                if j not in dic:                    continue                elif dic[j]>= envelopes[i][1]:                    continue                else:                    flag = True                    res = max(res,j+1)                    holdlist.append([j+1,envelopes[i][1]])                    break            if flag == False:                holdlist.append([1,envelopes[i][1]])            if i == len(envelopes) - 1 or envelopes[i][0] < envelopes[i+1][0]:                for k in holdlist:                    if k[0] not in dic:                        dic[k[0]] = k[1]                    else:                        dic[k[0]] = min(dic[k[0]],k[1])                holdlist = []        #print dic        return res

 

转载于:https://www.cnblogs.com/seyjs/p/9569131.html

你可能感兴趣的文章
(转)sqlite developer注册方法
查看>>
最大值 最小值 最初值 最末值
查看>>
Anagrams
查看>>
iphone手机分辨率--持久维护
查看>>
DRP——Servlet(一)
查看>>
pydoc介绍
查看>>
使用rsyslog+loganalzey收集日志显示客户端ip
查看>>
EF实现主从表自动生成主键保存
查看>>
Atitit.程序包装exe启动器 打包 发布 设计 -生成exe java
查看>>
Mac下MySQL卸载方法 转载
查看>>
Chrome for Android在Chromium代码库中的提交patch
查看>>
iphone 拨打电话的 两种方法-备
查看>>
python小程序:备份文件
查看>>
为什么HikariCP被号称为性能最好的Java数据库连接池,怎样配置使用
查看>>
高德地图API INVALID_USER_SCODE问题以及keystore问题
查看>>
C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
查看>>
C# 抓取网页Html源码 (网络爬虫)
查看>>
盖得化工4——多线程+余数
查看>>
iOS开发小技巧--适当的清空模型中的某个数据,达到自己的需求,记得最后将数据还原(百思项目评论页面处理最热评论)...
查看>>
物联网网络编程、Web编程综述
查看>>