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