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

PythonのSelfを除く配列の製品


n>1であるn個の整数のnumsという配列があるとします。output[i]がnums[i]を除くnumsのすべての要素の積に等しくなるような配列出力を見つける必要があります。したがって、入力配列が[1,2,3,4]の場合、出力は[24,12,8,6]になります。除算演算子を使用せずにこれを解決する必要があります。

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

  • right_mul:=numsと同じサイズの配列、0で埋める
  • right_mulの最後の要素=numsの最後の要素
  • 1からnumsの長さのiの場合
    • right_mul [numsの長さ– i – 1] =right_mul [numsの長さ– i] * nums [numsの長さ– i – 1]
  • output:=numsと同じサイズの配列、0で埋めます
  • プレフィックス:=1、インデックス:=0
  • while index <出力の長さ– 1
    • output [index]:=prefix * right_mul [index + 1]
    • prefix:=prefix * nums [index]
    • index:=index + 1
  • 出力の最後の要素:=プレフィックス
  • 出力を返す

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

class Solution(object):
   def productExceptSelf(self, nums):
      right_multiply = [0] * len(nums)
      right_multiply[-1]=nums[-1]
      for i in range(1,len(nums)):
         right_multiply[len(nums)-i-1] = right_multiply[len(nums)-i] * nums[len(nums)-i-1]
      output = [0]*len(nums)
      prefix = 1
      current_index = 0
      while current_index < len(output)-1:
         output[current_index] = prefix * right_multiply[current_index+1]
         prefix *= nums[current_index]
         current_index +=1
      output[-1] = prefix
      return output
ob1 = Solution()
print(ob1.productExceptSelf([1,3,5,7,9]))

入力

[1,3,5,7,9]

出力

[945, 315, 189, 135, 105]

  1. Bisect-Pythonの配列二分アルゴリズム

    長いリストに挿入するたびにソート操作を実行すると、プロセッサが消費する時間の点でコストがかかる場合があります。 bisectモジュールは、挿入後にリストが自動的にソートされたままになることを保証します。この目的のために、それは二分アルゴリズムを使用します。モジュールには次の機能があります: bisect_left() このメソッドは、ソートされた順序を維持するために、リスト内の特定の要素の挿入ポイントを見つけます。リストにすでに存在する場合、挿入ポイントは既存のエントリの前(左側)になります。戻り値は、list.insert()の最初のパラメーターとして使用できます。 bisect_ri

  2. Pythonでの動的配列の実装

    動的配列 Pythonでは、リスト、セット、ディクショナリは可変オブジェクトです。一方、数値、文字列、およびタプルは不変のオブジェクトです。可変オブジェクトとは、リスト、セット、または辞書からアイテムを追加/削除することを意味しますが、タプルや文字列などの不変オブジェクトの場合は当てはまりません。 Pythonでは、リストは動的配列です。動的リストを作成してみましょう- >>> #Create an empty list, named list1 >>> list1 = [] >>> type (list1) <class