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

Pythonで線形時間のk番目に小さい要素を見つけるプログラム


numsという数値のリストがあり、別の値kもあるとすると、リスト内でk番目(0から始まる)の最小要素を見つける必要があります。この問題は平均してO(n)時間で解決する必要があります。

したがって、入力がnums =[6、4、9、3、1] k =2の場合、リストを並べ替えると[1、3、4、6、9]のようになり、出力は4になります。 、k番目に小さい要素は4です。

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

  • maxHeap:=新しい空のヒープ
  • 0からkの範囲のiについては、
    • nums[i]をmaxHeapに挿入
  • k + 1の範囲のiからnums-1のサイズまで、do
    • nums [i]> maxHeap [0]の場合、
      • maxHeapからトップを削除
      • nums[i]をmaxHeapに挿入
  • return maxHeap [0]

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

from heapq import heappop, heappush
def solve(nums, k):
   maxHeap = []
   for i in range(k + 1):
      heappush(maxHeap, -nums[i])
   for i in range(k + 1, len(nums)):
      if nums[i] < -maxHeap[0]:
         heappop(maxHeap)
         heappush(maxHeap, -nums[i])
   return -maxHeap[0]

nums = [6, 4, 9, 3, 1]
k = 2
print(solve(nums, k))

入力

[6, 4, 9, 3, 1], 2

出力

4

  1. Pythonプログラムでの線形探索

    この記事では、線形検索とPython3.xでの実装について学習します。またはそれ以前。 アルゴリズム 指定されたarr[]の左端の要素から開始し、要素xをarr []の各要素と1つずつ比較します。 xがいずれかの要素と一致する場合は、インデックス値を返します。 xがarr[]のどの要素とも一致しない場合は、-1を返すか、要素が見つかりません。 次に、特定のアプローチの視覚的表現を見てみましょう- 例 def linearsearch(arr, x):    for i in range(len(arr)):     &nbs

  2. 線形探索のためのPythonプログラム

    この記事では、線形検索とPython3.xでの実装について学習します。またはそれ以前。 アルゴリズム Start from the leftmost element of given arr[] and one by one compare element x with each element of arr[] If x matches with any of the element, return the index value. If x doesn’t match with any of elements in arr[] , return -1 or element no