Fecha: 2020-10-25
Autor: 19th LZ
Etiqueta: Programación dinámica JAVA
Descripción del Título
Llamamos "montañas" a cualquier subarreglo continuo B en el arreglo A que cumpla con las siguientes propiedades:
B.length> = 3
existe 0 <i <B.length-1 tal que B [0] <B [1] <… B [i-1] <B [i]> B [i + 1]>…> B [B.length-1]
(Nota: B puede ser cualquier submatriz de A, incluida la matriz completa A.)
Dada una matriz entera A, devuelve la longitud de la "montaña" más larga.
Si no se incluye "montaña", se devuelve 0.
Ejemplo:
示例 1:
输入:[2,1,4,7,3,2,5]
输出:5
解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。
示例 2:
输入:[2,2,2]
输出:0
解释:不含 “山脉”。
Ideas de resolución de problemas: programación dinámica
Código
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;}
}
}