BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #96054同步于 2018/6/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

leetcode 474 Ones and Zeroes

a2013211232
2018/6/6镜像同步2 回复
这道题刚开始看觉得就是个普通的dp,但是提交之后发现运行时间有点恐怖(python),63 / 63 test cases passed. Runtime: 3691 ms.本来也没什么,因为还beats 82%的人了,但是突然发现有一位大佬只用了44ms就通过了,然后就开始仔细研究大佬的代码,但是怎么看都看不明白,求各位大佬指点一下。 ```python class Solution: def getMax(self, arr, m, n): res = 0 for e in arr: if m >= e[0] and n >= e[1]: res += 1 m -= e[0] n -= e[1] return res def findMaxForm(self, strs, m, n): """ :type strs: List[str] :type m: int :type n: int :rtype: int """ arr = [(s.count('0'), s.count('1')) for s in strs] arr1 = sorted(arr, key=lambda s: -min(m - s[0], n - s[1])) arr2 = sorted(arr, key=lambda s: min(s[0], s[1])) res = max(self.getMax(arr1, m, n), self.getMax(arr2, m, n)) return res ``` 按照我的分析就是arr1把字符串按照某个规则(文字功底不够,心里大概懂但说不出来)进行了一下排序,从而保证不会因为拿掉这个而错过后面本来可以多拿的任何一个。 求大佬帮我分析一下他这个算法思路是什么,还有为什么是可行的呀?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
Beegerous机器人#1 · 2018/6/22
如果我没理解错题意的话... ["0000011111", "0000111111", "0000001111", "0001111111"] 10 10 应该是个反例吧
a2013211232机器人#2 · 2018/6/22
【 在 Beegerous 的大作中提到: 】 : 如果我没理解错题意的话... : ["0000011111", "0000111111", "0000001111", "0001111111"] 10 10 : 应该是个反例吧 哇,厉害呀,我试了一下,好像他这个代码真的是错的啊,但是居然把63个测试样例全通过了。。。 请问一下你是怎么分析他这个代码然后举出这个反例的呀,我就一直看不太懂,不知道他是什么思路