Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの有界配列の特定のインデックスで最大値を見つけるプログラム


n、index、maxSumの3つの値があるとします。 nums [index]を見つける必要があるnumsという配列を考えてみましょう。また、numsは次の条件を満たす必要があります-

  • numsのサイズはnです

  • nのすべての要素は正です。

  • | nums [i]-nums [i + 1] | <=1すべてのi、0 <=i

  • numsのすべての要素の合計がmaxSumを超えない。

  • nums[index]が最大化されます。

したがって、入力がn =6、index =3、maxSum =8の場合、出力は2になります。これは、[1,2,2,2,1,1]のような、すべてを満たす配列を取得できるためです。条件、ここではnums[3]が最大化されます。

これを解決するには、次の手順に従います-

  • 左:=maxSum / nの商、右:=maxSum + 1

  • ans:=0

  • 左<右、する

    • mid:=左+(右左)/2の商

    • ind_l:=(mid-1 +最大1および(mid-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

      • 左:=mid + 1

    • それ以外の場合

      • 右:=半ば

  • 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

  1. Pythonですべてのペアが適切である特定の配列の任意のシーケンスの最大サイズを見つけるプログラム

    サイズnのシーケンス番号があるとします。すべてのペア(p、q)が適切なペアであるnumsのサブシーケンスの最大サイズを見つける必要がありますか?ペイトは、次の条件の少なくとも1つを保持している場合にのみ、適切なペアであると言われます。1.pの個別の素数除数の数のパリティがbのパリティと等しい。たとえば、値18には、2と3の2つの異なる素数の約数があります。2。pのすべての正の約数の合計のパリティはqと同じです。 したがって、入力がnums =[2,3,6,8]の場合、出力は3になります。 これを解決するには、次の手順に従います- n:=numsのサイズ 3つの空のリストcnt、

  2. Pythonプログラムで配列の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66