最長のシーケンスを上昇Leetcode_300_

タイトルの説明:順序なし整数配列、最長見出さ立ち上がりシーケンスの長さを与えられました。
例:

输入: [10,9,2,5,3,7,101,18]
输出: 4 
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。

アルゴリズム:タイトル最終結果の長さを記録するためのDP []配列、DPを設定する必要があり、最長の配列要件を上昇[i]は、最後の要素は、長さの配列NUMS [I]を含んでいます。DPは、[I]の値は2つだけの場合である、第一の場合:現在の表面要素が現在NUMSない[i]の要素の値が小さい、DPである[I] = 1、即ち、唯一の要素自体が含まれ、長さは1です。第二の場合:小さな元素比率NUMSの存在する表面[i]は、現在の意志NUMS [I]は要素の背面に追加さNUMS未満である[I]、DP [I ] DP [I] +1を=。
具体的には:[I] = 1、配列DP、DPの初期化 ANS = -1 の最大長さ増分を返すために使用され、場合NUMS [I]>場合NUMS [J]、およびDP [i]が<DP [J ] +1 、更新されたDP [i]はDPを= [J ] +1、 DPは、ANS = MAX(ANS、[i]は、ルックANSを更新する計算 DPは[i])と、 最大最終ANSは、サブシーケンスの長さが増加している
Iを

コードの実装:

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int length=nums.size();
        if(length==0)
            return 0;
        int dp[length];
        for(int i=0;i<length;i++){
            dp[i]=1;//边界
        }
        int ans=-1;
        for(int i=0;i<length;i++){
            for(int j=0;j<i;j++){
                if(nums[i]>nums[j]&&(dp[i]<dp[j]+1)){
                    dp[i]=dp[j]+1;
                }
            }
            ans=max(ans,dp[i]);
        }
        return ans;
    }
};

おすすめ

転載: blog.csdn.net/all_about_WZY/article/details/89883960