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

Pythonで2つの配列の要素のk番目に大きい積を見つけるプログラム


いくつかの整数を含む2つのリストpとqが与えられたと仮定します。これらのリストのすべての値を乗算し、乗算結果からk番目に大きい値を見つける必要があります。

したがって、入力がp =[2、5]、q =[6、8]、k =2の場合、出力は16になります。

乗算の結果は次のとおりです。2*6=12、2 * 8 =16、5 * 6 =30、5 * 8 =40。2番目に大きい要素はis(インデックスは0から始まります)は16です。

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

  • リストを並べ替えるp
  • リストを並べ替えるq
  • k:=k + 1
  • ヒープ:=リスト表現の新しいヒープ
  • qの各要素について、
    • elem> =0の場合、
      • iの範囲(p-1のサイズ)から-1の場合、1ずつ減少します。
        • cd:=elem * p [i]
        • ヒープが空でなく、ヒープのサイズがkおよびcdと同じである場合<=heap [0]、
          • ループから抜け出す
        • 値cdをヒープに挿入します
        • (ヒープ)の長さが> kの場合、
          • ヒープから最小のアイテムを削除する
    • それ以外の場合、
      • 0からpのサイズの範囲のiについては、
        • cd:=elem * p [i]
        • ヒープが空でなく、ヒープのサイズがkおよびcdと同じである場合<=heap [0]、
          • ループから抜け出す
        • CDをヒープに挿入
        • (ヒープ)> kの長さがゼロ以外の場合、
          • ループから最小のアイテムを削除します
  • ヒープを返す[0]

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

from heapq import heappush, heappop
def solve(p, q, k):
p = sorted(p)
q = sorted(q)
k += 1
heap = []
for elem in q:
if elem >= 0:
for i in range((len(p) - 1), -1, -1):
cd = elem * p[i]
if heap and len(heap) == k and cd <= heap[0]:
break
heappush(heap, cd)
if len(heap) > k:
heappop(heap)
else:
for i in range(len(p)):
cd = elem * p[i]
if heap and len(heap) == k and cd <= heap[0]:
break
heappush(heap, cd)
if len(heap) > k:
heappop(heap)
return heap[0]
print(solve([2, 5], [6, 8], 2))

入力

[2, 5], [6, 8], 2

出力

16

  1. 2つのソートされた配列から最も近いペアを見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの配列が与えられたので、2つのソートされた配列から最も近いペアを見つける必要があります 次に、以下の実装のソリューションを見てみましょう- 例 # sys module import sys # pair def print_(ar1, ar2, m, n, x):    # difference    diff=sys.maxsize    # index    l = 0    r = n-1 &

  2. いいえが2の累乗であるかどうかを調べるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 数nが与えられた場合、与えられた数が2の累乗であるかどうかを確認する必要があります。 アプローチ 入力数を2で割り続けます。つまり、=n/2を繰り返します。 各反復で、n%2がゼロ以外になり、nが1でない場合、nは2の累乗ではないことを確認します。 nが1になると、2の累乗になります。 以下の実装を見てみましょう- 例 def isPowerOfTwo(n):    if (n == 0):       retur