Date: 2020-10-25
Auteur: 19e LZ
Étiquette: programmation dynamique JAVA
Description du titre
Nous appelons tout sous-tableau continu B dans le tableau A qui répond aux propriétés suivantes comme "montagnes":
B.length> = 3
existe 0 <i <B.length-1 tel que B [0] <B [1] <… B [i-1] <B [i]> B [i + 1]>…> B [B.length-1]
(Remarque: B peut être n'importe quel sous-tableau de A, y compris l'ensemble du tableau A.)
Étant donné un tableau d'entiers A, renvoie la longueur de la plus longue "montagne".
Si "montagne" n'est pas inclus, 0 est renvoyé.
Exemple:
示例 1:
输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
示例 2:
输入:[2,2,2]
输出:0
解释:不含 “山脉”。
Idées de résolution de problèmes: programmation dynamique
Code
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;}
}
}