LC 100320. 执行操作可获得的最大总奖励 II
https://leetcode.cn/problems/maximum-total-reward-using-operations-ii/description/
这里最开始使用的是sortedset实现,但是这个bitset实现太慢了。
class Solution:
def maxTotalReward(self, rewardValues: List[int]) -> int:
from sortedcontainers import SortedSet
sl = SortedSet([0])
rewardValues.sort()
for x in rewardValues:
tmp = []
for y in sl:
if y >= x: break
tmp.append(x + y)
# print(x, sl, tmp)
sl.update(tmp)
return sl[-1]
这个我以为python下面有什么更好的Bitset库来着,原来直接使用内置的整数就可以有效地实现bit ops. 这个 `bit_length` 实现以及下面的类似 `bit_count` 好像是在3.11之后才有的。
class Solution:
def maxTotalReward(self, rewardValues: List[int]) -> int:
f = 1
for v in sorted(set(rewardValues)):
f |= (f & ((1 << v) - 1)) << v
return f.bit_length() - 1