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

Pythonでソートされた配列の要素の最初と最後の位置を見つける


整数Aの配列があるとします。これは昇順で並べ替えられ、指定されたターゲット値の開始位置と終了位置を見つける必要があります。配列内にターゲットが見つからない場合は、[-1、-1]を返します。したがって、配列が[2,2,2,3,4,4,4,4,5,5,6]のようで、ターゲットが4の場合、出力は[4,7]

になります。

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

  • 最初はres:=[-1、-1]、low:=0、high:=配列Aの長さに設定
  • 低い<高い
    • 中:=低+(高–低)/ 2
    • A [mid]がターゲットの場合、
      • high:=mid、res [0]:=mid、res [1]:=mid
    • それ以外の場合、A [mid] <ターゲットの場合、次にlow:=mid + 1、それ以外の場合はhigh:=mid
  • res [0] =-1の場合、resを返します
  • 低:=res [0] + 1、高:=数値の長さ
  • 低い<高い
    • 中:=低+(高–低)/ 2
    • A [mid]がターゲットの場合、
      • low:=mid + 1、res [1]:=mid
    • それ以外の場合、A [mid] <ターゲットの場合、次にlow:=mid + 1、それ以外の場合はhigh:=mid
  • return res

例(Python)

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

class Solution(object):
   def searchRange(self, nums, target):
      res = [-1,-1]
      low = 0
      high = len(nums)
      while low<high:
         mid = int(low + (high-low)//2)
         if nums[mid] == target:
            high = mid
            res[0]=mid
            res[1]=mid
         elif nums[mid]<target:
            low = mid+1
         else:
            high = mid
      if res[0] == -1:
         return res
      low = res[0]+1
      high = len(nums)
      while low<high:
         mid = int(low + (high-low)//2)
         if nums[mid] == target:
            low = mid+1
            res[1] = mid
         elif nums[mid] < target:
            low = mid + 1
         else:
            high = mid
      return res
ob1 = Solution()
print(ob1.searchRange([2,2,2,3,3,4,4,4,4,5,5,6], 4))

入力

[2,2,2,3,4,4,4,4,5,5,6]
4

出力

[5, 8]

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

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列が与えられたので、配列の最大要素を計算する必要があります。 ここでは、ループ全体をトラバースして最大の要素を計算し、要素を取得するブルートフォースアプローチを使用します。 以下の実装を観察できます。 例 # largest function def largest(arr,n):    #maximum element    max = arr[0]    # traverse the whole loop    for

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

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