在Python中找到有界数组中给定索引处的最大值的程序

在Python中找到有界数组中给定索引处的最大值的程序

假设我们有三个值n、index和maxSum。考虑一个名为nums的数组,我们需要找到nums[index],并且nums满足以下条件:-

  • nums的大小为n

  • n中的所有元素都是正数。

  • 对于所有i,0≤i

  • nums的所有元素的总和不超过maxSum。

  • nums[index]是最大化的。

因此,如果输入如下:n = 6,index = 3,maxSum = 8,则输出将为2,因为我们可以获得一个数组[1,2,2,2,1,1],满足所有条件。并且在这里,nums[3]被最大化了。

为了解决这个问题,我们将按照以下步骤进行:-

  • left := maxSum / n的商,right := maxSum + 1

  • ans := 0

  • 当 left < right 时执行:

    • mid := left + (right-left)/2的商
    • ind_l := (mid-1 + 1和(mid-index)的最大值的最大值) * ((index和(mid-1)的最小值的商)/2 + |最小值0和mid-index-1|
    • ind_r = (mid + 1和(mid-(n-index-1))的最大值的最大值) * ((n-index和mid的最小值的商)/2 + |最小值0和(mid-(n-index-1)-1)|
    • 如果ind_l + ind_r <= maxSum,则
      • ans := mid
      • left := mid+1
    • 否则,右侧:= mid
  • 返回ans

例子

让我们看一下以下实现以便更好地理解:

def solve(n, index, maxSum):
   left, right = maxSum//n, maxSum+1
   ans = 0
   while(left<right):
      mid = left + (right-left)//2
      ind_l = (mid-1+max(1,mid-index))*min(index,mid-1)//2 + abs(min(0,mid-index-1))
      ind_r = (mid+max(1,mid-(n-index-1)))*min(n-index, mid)//2+ abs(min(0,mid-(n-index-1)-1))

      if ind_l + ind_r <=maxSum:
         ans = mid
         left = mid+1
      else:
         right = mid
   return ans

n = 6
index = 3
maxSum = 8
print(solve(n, index, maxSum))

输入

6, 3, 8

输出

2

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程