class Solution:
def maximumScore(self, nums: List[int], k: int) -> int:
n = len(nums)
mod = 10**9 +7
mx = max(nums) + 1
prime_cnt = [0] * mx
for i in range(2, mx):
if prime_cnt[i]:
continue
for j in range(i, mx, i):
prime_cnt[j] += 1
prime_nums = [0] * n
idx = [0] * n
for i in range(n):
prime_nums[i] = prime_cnt[nums[i]]
idx[i] = i
idx = sorted(idx, key=lambda x: nums[x],reverse=True)
q = list()
left = [-1] * n
right = [n] * n
for i in range(n):
while q and prime_nums[i] > prime_nums[q[-1]]:
q.pop()
if q:
left[i] = q[-1]
q.append(i)
q = list()
for i in range(n-1,-1,-1):
while q and prime_nums[i] >= prime_nums[q[-1]]:
q.pop()
if q:
right[i] = q[-1]
q.append(i)
ans = 1
for i in range(n):
if k == 0:
break
cnt = (idx[i] - left[idx[i]]) * (right[idx[i]] - idx[i])
cnt = min(cnt,k)
ans *= pow(nums[idx[i]],cnt)
ans %= mod
k -= cnt
return ans
关于#lc-2818#的问题,请各位专家解答!
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
如果答案让您满意,请采纳、关注,非常感谢!
这段代码是一个解决maximumScore问题的Python类的实现。该问题是给定一个由正整数组成的数组nums和一个整数k,从nums中选择一个数nums[i]并删除该数字,增加得分nums[i] * left * right,其中left和right是与nums[i]相邻的两个数字。 这段代码实现了一个Solution类,其中包含一个maximumScore方法来解决这个问题。代码首先计算了数组中每个数字的质数因子数量,然后根据nums数组中数字的质数因子数量来排序nums和其对应的下标。接着使用单调栈来找到每个数字左侧和右侧第一个比自己大的数字的位置。最后根据算法计算得分并返回最大得分。 如果需要一个简单调用该方法的示例代码,可以使用以下代码:sol = Solution() nums = [1, 2, 3, 4, 5] k = 2 print(sol.maximumScore(nums, k))请确保在使用这段代码时进行测试和调试。
解决 无用评论 打赏 举报