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

サブアレイをチェックするプログラムは、等差数列から再配置することも、Pythonで再配置することもできません。


数列numsがあり、サイズmの別の2つの配列lとrがあるとすると、これらのlとrは[l [i]、r[i]]のような範囲クエリを表します。ブールシーケンスansを見つける必要があります。ここで、サブ配列nums [l [i]]、nums [l [i] + 1]、... nums [r [i] -1]、 nums [r [i]]は、等差数列を生成するように調整できます。それ以外の場合はfalseです。

シーケンスが少なくとも2つの要素で構成されていて、2つの連続する要素ごとの差が同じである場合、シーケンスは算術であると言われます。たとえば、いくつかの等差数列は、[2、4、6、8、10]、[5、5、5、5]、[4、-2、-8、-14]ですが、[2、2、 3、6、9]。

したがって、入力がnums =[6,8,7,11,5,9]、l =[0,0,2]、r =[2,3,5]のような場合、出力は[True 、False、True]なぜなら-

  • クエリ[0、2]の場合、シーケンスは[6,8,7]であり、[6,7,8]として再配置できます。これは有効です

  • クエリ[0、3]の場合、シーケンスは[6,8,7,11]であり、等差数列で再配置することはできません

  • クエリ[2、5]の場合、シーケンスは[7,11,5,9]であり、[5,7,9,11]として再配置できます。これは有効です

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

  • new:=lと同じサイズのリストで、すべての真の値を入力します

  • 範囲0からl-1のサイズのiの場合、実行

    • data:=インデックスl[i]からr[i]

      までのnumsのサブリスト
    • リストデータを並べ替える

    • d:=新しいリスト

    • 0からデータのサイズまでの範囲のjの場合-2、実行

      • d

        の最後にdata[j+1]-data[j]を挿入します
    • d:=dの新しいセットからの新しいリスト

    • dのサイズが1と同じでない場合、

      • new [i]:=False

  • 新規返品

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

def solve(nums, l, r):
   new = [True]*len(l)

   for i in range(len(l)):
      data = nums[l[i]:r[i]+1]
      data.sort()

      d = []
      for j in range(len(data) - 1):
         d.append(data[j+1] - data[j])

      d = list(set(d))
      if len(d) != 1:
         new[i] = False
   return new

nums = [6,8,7,11,5,9]
l = [0,0,2]
r = [2,3,5]
print(solve(nums, l, r))

入力

[6,8,7,11,5,9], [0,0,2], [2,3,5]

出力

[True,False,True]

  1. Pythonで左端または右端の位置に到達できるかどうかを確認するプログラム

    R、B、およびdot(。)の3つのタイプの文字を含む文字列があるとします。ここで、Rは現在の位置を表し、Bはブロックされた位置を表し、dot(。)は空の位置を表します。これで、有効(空)である限り、現在の位置に隣接する任意の位置に1つのステップで移動できます。 )。左端または右端のどちらかに到達できるかどうかを確認する必要があります。 したがって、入力がs =........... R ..... BBBB .....の場合、Rは左端の位置に到達できるため、出力はTrueになります。ブロックはありません。 これを解決するには、次の手順に従います- r_pos:=sの「R」のインデックス

  2. Pythonで、どの都市からでも、どの都市からでも訪問できるかどうかを確認するプログラム

    範囲[0、n)の数値として表されたn個の都市があり、ある都市を別の都市に接続する一方通行の道路のリストもあるとします。どの都市からどの都市にも到達できるかどうかを確認する必要があります。 したがって、入力がn =3の場合、roads =[[0、1]、[0、2]、[1,0]、[1,2]、[2,0]、[2,1]] 、0から1および1から0に移動できるため、出力はTrueになります これを解決するために、次の手順に従います- 関数dfs()を定義します。これには、i、visited、gが必要です。 iを訪問済みとしてマーク g [i]のjごとに、実行 jにアクセスしない場