アレイ内LeetCode 845最長マウンテン

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/longest-mountain-in-array/

トピック:

のは、(Aの)(連続した)サブアレイBいずれかを呼ぶことにしましょう  山を  次のプロパティが保持している場合:

  • B.length >= 3
  • 一部が存在する  0 < i < B.length - 1 ように B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]

(B全体配列Aを含むAの任意のサブアレイ、とすることができることに留意されたいです)

配列を指定し  A た整数の、最長の長さを返す  山を。 

戻る  0 何山が存在しない場合。

例1:

入力:[2,1,4,7,3,2,5] 
出力:5 
説明:最大の山は長さ5を持っている[1,4,7,3,2]。

例2:

入力:[2,2,2] 
出力:0 
説明:山はありません。

注意:

  1. 0 <= A.length <= 10000
  2. 0 <= A[i] <= 10000

ファローアップ:

  • 1つのだけのパスを使用してそれを解決することはできますか?
  • あなたはそれを解決することができます  O(1) スペース?

ソリューション:

みとめパスでそれを行うことができます。左から右にカウントアップ計算するための一つのパス。 

カウントダウン計算を右から左に一つのパス。

次いで、最終パスは、最大値を計算します。

フォローアップO(1)スペースを1つのパスは述べています。 

[i]を== Aは、[I-1]、それは山ではない場合、私は++します。

まず、最初にカウントアップしてみてくださいカウントダウンをしてみてください。両方のカウントが正であれば、それはそれは山であることを意味します。更新RES。

時間計算:O(n)を。N = A.length。

スペース:O(1)。

ACのJava:

1  クラスソリューション{
 2      公共 INT longestMountain(INT [] A){
 3          INT RES = 0 4          INT I = 1 5          INT N = A.length。
6          一方(iは< N){
 7              一方が(iは<N && A [i]が== A [I-1 ]){
 8                  I ++ 9              }
 10              
11              のint = 0アップ12              一方(iは<N && A [i]が> A [I-1 ]){
 13                  まで++ 14                  私は++します;
15              }
 16              
17              INTダウン= 0 18              一方(iは<N && A [I] <[I-1 ]){
 19                  ダウン++ 20                  私は++します;
21              }
 22              
23              であれば(最大> 0 &&ダウン> 0 ){
 24の                  RES = Math.max(RES、アップ+ダウン+ 1 )。
25              }
 26          }
 27の         
28          戻りRES。
29      }
 30 }

 

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/11361560.html