ピーク要素IIを探します

以下のような特徴を持っている整数行列があります:

  • 隣接する位置にある数字は異なっています。
  • マトリックスは、n行m列を有します。
  • 私は<全てのmについて、A [0] [i]は<A [1]〜[I] && A [N - 2] [I]> A [N - 1] [I]
  • 全てのj <NについてA [j] [0] <[J] [1] && A [j]は[M - 2]> A [j]は[M - 1]

私たちは、Pがあれば、PEEKの位置を定義します。

A[j][i] > A[j+1][i] && A[j][i] > A[j-1][i] && A[j][i] > A[j][i+1] && A[j][i] > A[j][i-1]

行列を考えます:

[
  [1 ,2 ,3 ,6 ,5],
  [16,41,23,22,6],
  [15,17,24,21,7],
  [14,18,19,20,10],
  [13,14,11,10,9]
]

リターン41の指標(ある[1,1])、または24のインデックス(あります[2,2]

アイデアは、約2分後に、上側と下半分にあります。T(N)= O(N)の複雑+ O(N / 2)+ T(N / 2)... T(N)= O(N)+ O(N / 2)+ O(N / 2)+ O(N / 4)... = 3 *(O(N / 2)+ O(N / 4)+ ...)= O(N)

クラスソリューション:
     #1 @paramのA:リスト整数のリスト
    #1 @return:位置の指標は、例えば、整数のリストである[2,2] 
    DEF findPeakII(自己、A):
         もし ない戻り [-1 、-1 ] 
        、L = 1 
        、R = LEN([0]) - 2 
        アップ = 1 
        ダウン = LEN(A) - 2つの
         インポートSYS
         ながら L + 1 <R  + 1 <アップダウン:
            midRow =(アップ+ダウン)/ 2 
            rowMax = - sys.maxint - 1   真ん中の行の最大値
            のための I はxrange(L、R + 1): は、中段に最大値を見つけ
                た場合、[midRow] [I]> :rowMax 
                    index1の = I 
                    rowMax = A [midRow] [I]
             もし [index1の<rowMax - [1 midRow]  A [midRow + 1] [index1の< :rowMax
                 戻り[midRow、index1の]を
             場合 [midRow - 1] [index1の]> rowMax:
                    ダウン = midRow
                 
                    最大 = midRow 
            colMax = -sys.maxint - 1 のための J はxrange(上下に、+ 1 ):
                 もし [J] [index1の]> colMax:
                    INDEX2 = J 
                    colMax = A [j]と[index1の]
             なら [ INDEX2] [index1の- 1] <colMax 及び A [INDEX2] [index1の+ 1] < colMax:
                 リターン[INDEX2、index1の]
             もし [INDEX2] [index1の-1]> :colMax 
                    R

            = index1の
                 
                    L = index1の
       
        場合 [最大] [L]> A [DOWN] [L] または [最大] [R]> A [DOWN] [R]:
            最初 = アップ
         
            最初 = ダウン
         場合 [第] [L]> A [最初] [R]:
            第二 = L
         
            第二 = Rの
         リターン [第一、第二】

 

 

ます。https://www.cnblogs.com/sherylwang/p/5602711.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_33753845/article/details/94526089