返回信息流这道题刚开始看觉得就是个普通的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把字符串按照某个规则(文字功底不够,心里大概懂但说不出来)进行了一下排序,从而保证不会因为拿掉这个而错过后面本来可以多拿的任何一个。
求大佬帮我分析一下他这个算法思路是什么,还有为什么是可行的呀?
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #96054同步于 2018/6/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
leetcode 474 Ones and Zeroes
a2013211232
2018/6/6镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
如果我没理解错题意的话...
["0000011111", "0000111111", "0000001111", "0001111111"] 10 10
应该是个反例吧
【 在 Beegerous 的大作中提到: 】
: 如果我没理解错题意的话...
: ["0000011111", "0000111111", "0000001111", "0001111111"] 10 10
: 应该是个反例吧
哇,厉害呀,我试了一下,好像他这个代码真的是错的啊,但是居然把63个测试样例全通过了。。。
请问一下你是怎么分析他这个代码然后举出这个反例的呀,我就一直看不太懂,不知道他是什么思路