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

Pythonを使用してサイズMの最新のグループを見つけるプログラム


1からnまでの数の順列を保持している配列arrがあるとします。サイズnのバイナリ文字列があり、最初はそのすべてのビットがゼロに設定されている場合。ここで、1からnまでの各ステップi(バイナリ文字列とarrの両方でインデックス作成は1から始まります)で、位置arr [i]のビットは1に設定されます。別の値mもあり、最新のものを見つける必要があります。サイズmのもののグループが存在するステップ。ここで、1のグループとは、どちらの方向にも拡張できないような1の連続したサブストリングを意味します。正確にmの長さのグループが存在する最新のステップを見つける必要があります。そのようなグループが見つからない場合は、-1を返します。

したがって、入力がarr =[3,5,1,2,4] m =3の場合、最初のバイナリ文字列は「00000」であるため、出力は4になります。次の手順-

  • "00100"、グループ:["1"]

  • "00101"、グループ:["1"、 "1"]

  • "10101"、グループ:["1"、 "1"、 "1"]

  • "11101"、グループ:["111"、 "1"]

  • "11111"、グループ:["11111"]

ここで、サイズ3のグループが存在する最新のステップはステップ4です。

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

  • n:=arrのサイズ

  • num:=0

  • ans:=-1

  • l:=サイズnの配列、0で埋める

  • r:=サイズnの配列で、0で埋めます

  • 0からn-1の範囲のiの場合、実行

    • cur:=1

    • idx:=arr [i]-1

    • r [idx]がmと同じ場合、

      • num:=num-1

    • l [idx]がmと同じ場合、

      • num:=num-1

    • cur:=cur + l [idx] + r [idx]

    • num:=num+curはmと同じです

    • num> 0の場合、

      • ans:=ansの最大値、i + 1

    • idx --l [idx]> 0の場合、

      • r [idx --l [idx] -1]:=cur

    • idx + r [idx]

      • l [idx + r [idx] + 1]:=cur

  • ansを返す

理解を深めるために、次の実装を見てみましょう-

def solve(arr, m):
   n = len(arr)
   num = 0
   ans = -1
   l = [0] * n
   r = [0] * n
   for i in range(n):
      cur = 1
      idx = arr[i] - 1
      if r[idx] == m:
         num -= 1
      if l[idx] == m:
         num -= 1
      cur += l[idx] + r[idx]
      num += cur == m
      if num > 0:
         ans = max(ans, i + 1)
      if idx - l[idx] > 0:
         r[idx - l[idx] - 1] = cur
      if idx + r[idx] < n - 1:
         l[idx + r[idx] + 1] = cur
   return ans
arr = [3,5,1,2,4]
m = 3
print(solve(arr, m))

入力

[3,5,1,2,4], 3

出力

4

  1. Pythonでポリゴンの領域を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの領域を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は15になります。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です return x1 * y2-y1 * x2 メインの方法から、次の手順を実行します N:=ポイントのサイズ (firstx、firsty):=points [0] (prevx、prevy):=(fir

  2. Pythonでポリゴンの周囲を見つけるプログラム

    順序付けられたポイントのリストが2D平面上の単純なポリゴンエンドポイントを表すとします。このポリゴンの周囲を見つける必要があります。 したがって、入力がpoints =[(0、0)、(0,5)、(3、5)、(3,0)]のような場合、出力は16になります。 2つの辺の長さは3で、2つの辺の長さは5なので、2 * 5 + 2 * 3=16です。 これを解決するには、次の手順に従います- 関数getInfo()を定義します。これにはx1、y1、x2、y2が必要です ユークリッド距離である((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))の平方根を返します (x1、y1)