在Python中找到优秀子阵列的最大分数程序

在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

  • 返回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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程