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

Pythonで最大の要素が配置されている配列内のインデックスを見つけるプログラム


他のクラスからアクセスできない配列と、2つのパブリックメンバー関数length()およびcompare()を含む「TestArray」というクラスが与えられたとします。関数length()は配列の長さを返し、関数compare()は配列のさまざまなサブ配列を比較する3つの異なる値を返します。この関数は、入力として4つの値l、r、x、yを取り、次のように機能します-

  • if(array [l] + array [l + 1] + ...... + array [r-1] + array [r])>(array [x] + array [x + 1] + .. .. ... + array [y1] + array [y]); 1を返します

  • if(array [l] + array [l + 1] + ...... + array [r-1] + array [r])=(array [x] + array [x + 1] + .. .. ... + array [y1] + array [y]); 0を返します

  • if(array [l] + array [l + 1] + ...... + array [r-1] + array [r])<(array [x] + array [x + 1] + .. .. ... + array [y1] + array [y]); -1を返します

配列自体にアクセスせず、クラスのメンバー関数のみを使用して、配列内の最大要素のインデックスを見つける必要があります。

したがって、入力がarray =[8、4、2、12、11、8、4、2、7]のような場合、出力は3になります。配列の最大要素は12で、インデックスに配置されます。 3。

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

  • n:=length()

  • 低:=0

  • 高:=n-1

  • 低<高、実行

    • mid:=(low + high + 1)/ 2

      のフロア値
    • (low + high + 1)mod 2が0と同じ場合、

      • res:=compare(low、mid-1、mid、high)

      • resが1と同じ場合、

        • 高:=中-1

      • それ以外の場合

        • 低:=中

    • それ以外の場合

      • res:=compare(low、mid-1、mid + 1、high)

      • resが1と同じ場合、

        • 高:=中-1

      • それ以外の場合、resが-1と同じ場合、

        • 低:=中-1

      • それ以外の場合

        • 途中で戻る

    • 高が低と同じである場合、

      • ハイに戻る

  • -1を返す

例(Python)

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

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

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

   def compare(self, l, r, x, y):
      val1 = sum(i for i in self.__arr[l:r+1])
      val2 = sum(j for j in self.__arr[x:y+1])
      if val1 > val2:
         return 1
      elif val1 == val2:
         return 0
      elif val1 < val2:
         return -1

def solve(reader):
   n = reader.length()
   low,high = 0,n - 1
   while low < high:
      mid = (low+high+1)//2
      if (low+high+1)%2 == 0:
         res = reader.compare(low,mid-1,mid,high)
         if res == 1:high = mid - 1
         else:low = mid
      else:
         res = reader.compare(low,mid-1,mid+1,high)
         if res == 1:high = mid - 1
         elif res == -1:low = mid + 1
         else: return mid
      if high == low: return high
   return -1

arr_ob = TestArray([8, 4, 2, 12, 11, 8, 4, 2, 7])
print(solve(arr_ob))

入力

[8, 4, 2, 12, 11, 8, 4, 2, 7]

出力

3

  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