题目:原题链接(困难)
标签:贪心算法、哈希表
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 304ms (23.08%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def maximumBeauty(self, flowers: List[int]) -> int:
count = collections.Counter(flowers)
# 计算非零前缀和
# 计算以每一个数为第一朵花的砍花得分
cache = {}
prefix = [0]
for i in range(len(flowers)):
if flowers[i] not in cache:
cache[flowers[i]] = prefix[-1]
if flowers[i] > 0:
prefix.append(prefix[-1] + flowers[i])
else:
prefix.append(prefix[-1])
# 从后向前遍历选择最优解
ans = float("-inf")
visited = set()
for i in range(len(flowers) - 1, -1, -1):
if count[flowers[i]] > 1:
if flowers[i] not in visited:
ans = max(ans, prefix[i + 1] - cache[flowers[i]] + (flowers[i] * 2 if flowers[i] < 0 else 0))
return ans