日付:2020-10-25
著者:19番目のLZ
タグ:JAVAダイナミックプログラミング
タイトル説明
次のプロパティを満たすアレイ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が与えられた場合、最長の「山」の長さを返します。
「mountain」が含まれていない場合は、0が返されます。
例:
示例 1:
输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
示例 2:
输入:[2,2,2]
输出:0
解释:不含 “山脉”。
問題解決のアイデア:動的プログラミング
コード
class Solution {
public int longestMountain(int[] A) {
int n=A.length;
if(n<3){
return 0;
}
int right[]=new int [n];//上坡最大长度
int left[] =new int [n];//下坡最大长度
int max=0;
right[0]=left[n-1]=1;
for(int i=1;i<n;i++){
if(A[i]>A[i-1]){
right[i]=right[i-1]+1;
}else{
right[i]=1;
}
if(A[n-i-1]>A[n-i]){
left[n-i-1]=left[n-i]+1;
}else{
left[n-i-1]=1;
}
}
for(int i=0;i<n;i++){
if(right[i]!=1&&left[i]!=1)
max=Math.max(right[i]+left[i]-1,max);
}
if(max>=3){
return max;
}else{return 0;}
}
}