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

配列要素もPythonのインデックスと同じである最小のインデックスを見つけるプログラム


すべてのアイテムが一意であるnumsという要素のリストがあり、それらが昇順で並べ替えられているとすると、nums [i]=iとなる最小のiを見つける必要があります。解決策が見つからない場合は、-1を返します。この問題はO(log(n))時間で解決する必要があります。

したがって、入力がnums =[-4、-1、2、3、8]の場合、nums [2]=2とnums[3]=3の両方が小さいため、出力は2になります。

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

  • ret:=-1、lhs:=0、rhs:=numsのサイズ-1

  • lhs <=rhs、do

    • mid:=(lhs + rhs)/ 2

      のフロア
    • nums [mid]がmidと同じ場合、

      • ret:=mid

    • nums [mid]> =midの場合、

      • rhs:=mid-1

    • それ以外の場合

      • lhs:=mid + 1

  • retを返す

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

def solve(nums):
   ret = -1
   lhs = 0
   rhs = len(nums) - 1
   while lhs <= rhs:
      mid = (lhs + rhs) // 2
      if nums[mid] == mid:
         ret = mid
      if nums[mid] >= mid:
         rhs = mid - 1
      else:
         lhs = mid + 1
   return ret

nums = [-4, -1, 2, 3, 8]
print(solve(nums))

入力

[-4, -1, 2, 3, 8]

出力

2

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

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

  2. nで割った配列乗算のリマインダーを見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 複数の数値と数値入力nが与えられた場合、除算可能なすべての数値にnを掛けた後、余りを出力する必要があります。 アプローチ まず、arr [i]%nのように余りを計算します。次に、この余りに現在の結果を掛けます。 乗算後、オーバーフローを避けるために同じ余りを取ります。これは、モジュラー演算の分配法則に準拠しています。 ( a * b) % c = ( ( a % c ) * ( b % c ) ) % c 例 def findremainder(arr, lens, n):   &n