ここでのオリジナルタイトルリンク: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 説明:山はありません。
注意:
0 <= A.length <= 10000
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 }