アレイJAVAで最も長い山脈

日付: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;}


    }
}

おすすめ

転載: blog.csdn.net/cyl_csdn_1/article/details/109275599