在Python中找到优秀子阵列的最大分数程序
假设我们有一个名为nums的数组和一个值k。考虑子数组(i,j)的分数定义为子数组nums [i..j] *(j-i + 1)的最小值。现在,一个优秀的子阵列是满足i <= k <= j的子阵列。我们必须找到好子数组的最大可能得分。
因此,如果输入是nums = [2,5,4,8,5,6],k = 3,则输出将为20,因为最佳子阵列在此处为(1,5),因此nums [1..5]的最小值为4,因此4 *(5-1 + 1)= 20
为了解决这个问题,我们将遵循以下步骤 –
- ans:= nums [k],minNum:=nums [k]
-
i:= k,j:= k
-
while i> -1或j
- while i> -1 and nums [i]> = minNum,执行
- i:= i-1
- while j = minNum,执行
- j:= j + 1
- ans:= ans和((j-i-1)* minNum)的最大值
-
minNum:=(nums [i] if i> -1 else -1)和(nums [j] if j
- while i> -1 and nums [i]> = minNum,执行
- 返回ans
示例
让我们看下面的实现以更好地理解
def solve(nums,k):
ans = nums [k]
minNum = nums [k]
i = k
j = k
while i> -1或j -1 and nums [i]> = minNum:
i- = 1
while j = minNum:
j + = 1
ans = max(ans,(j-i-1)* minNum)
minNum = max(nums [i] if i> -1 else -1,nums [j] if j <
len(nums)else -1)
返回ans
nums = [2,5,4,8,5,6]
k = 3
print(solve(nums,k))
输入
[2,5,4,8,5,6],3
输出
20