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

Pythonの隠し配列で最も頻繁に使用される要素のインデックスを見つけるプログラム


値0または1のみを含むことができるプライベート配列を含む'TestArray'というクラスが与えられたとします。 2つのパブリックメンバー関数length()とquery()。関数length()は配列の長さを返し、関数query()は配列内のさまざまな値を比較する3つの異なる値を返します。この関数は、入力として4つの値p、q、r、sを取り、次のように機能します-

  • 配列の指定されたインデックスの4つの値すべてが0または1の場合、4を返します。

  • それ以外の場合、配列の指定されたインデックスの3つの値が同じで、4番目の値が異なる場合、2を返します。

  • それ以外の場合、配列の指定されたインデックスに2つの値0と2つの値1が含まれていると、0が返されます。

配列自体にアクセスせず、クラスのメンバー関数のみを使用せずに、配列内で最も頻繁に使用される要素のインデックスを見つける必要があります。配列に同じ数の0と1がある場合、値-1を返します。

したがって、入力がarray =[0、1、1、0、1、1、1、0]のようである場合、出力は2になります。配列のインデックス2では、値は最も頻繁な1です。配列の値。同様に、インデックスにも値1が含まれているため、回答1、4、5、6も当てはまります。

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

  • n:=length()

  • groupA:=1

  • groupB:=0

  • aIdx:=null

  • bIdx:=null

  • first:=:=query(0、1、2、3)

  • 2番目:=query(0、1、2、4)

  • 4からnの範囲のiの場合、実行します

    • query(0、1、2、i)が最初と同じである場合、

      • groupA:=groupA + 1

      • aIdx:=i

    • それ以外の場合

      • groupB:=groupB + 1

      • bIdx:=i

  • 0から2の範囲のiの場合、実行

    • nxt:=新しいリスト

    • 1から4の範囲のvの場合、実行

      • vがiと同じでない場合、

        • nxtの最後にvを追加します

    • query(nxtの値)がsecondと同じ場合、

      • groupA:=groupA + 1

      • aIdx:=i

    • それ以外の場合

      • groupB:=groupB + 1

      • bIdx:=i

  • groupA> groupBの場合、

    • aIdxを返す

  • それ以外の場合、groupB> groupAの場合、

    • aIdxを返す

  • それ以外の場合

    • -1を返す

例(Python)

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

class TestArray:
   def __init__(self, array) -> None:
      self.__arr = array

   def length(self):
      return len(self.__arr)

   def query(self, p, q, r, s):
      val = self.__arr[p] + self.__arr[q] + self.__arr[r] + self.__arr[s]
      if val == 4 or val == 0:
         return 4
      elif val == 1 or val == 3:
         return 2
      elif val == 2:
         return 0

def solve(reader):
   n,groupA,groupB,aIdx,bIdx=reader.length(),1,0,None,None
   first,second=reader.query(0,1,2,3),reader.query(0,1,2,4)
   for i in range(4,n):
      if reader.query(0,1,2,i)==first:
         groupA,aIdx=groupA+1,i
      else:
         groupB,bIdx=groupB+1,i
   for i in range(3):
      nxt=[v for v in [0,1,2,3,4] if v!=i]
      if reader.query(*nxt)==second:
         groupA,aIdx=groupA+1,i
      else:
         groupB,bIdx=groupB+1,i
   return aIdx if groupA>groupB else bIdx if groupB>groupA else -1

arr_ob = TestArray([0, 1, 1, 0, 1, 1, 1, 0])
print(solve(arr_ob))

入力

[0, 1, 1, 0, 1, 1, 1, 0]

出力

2

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

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '

  2. 配列内の最大の要素を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列を指定すると、配列内で最大の要素を見つける必要があります。 アプローチ maxを最初の要素として初期化します。 この後、指定された配列を2番目の要素から最後までトラバースします。 トラバースされたすべての要素について、現在のmaxの値と比較します maxより大きい場合、maxが更新されます。 それ以外の場合、ステートメントはを超えます 以下の実装を見てみましょう- 例 def largest(arr,n):    #maximal element