タイトルの説明:順序なし整数配列、最長見出さ立ち上がりシーケンスの長さを与えられました。
例:
输入: [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;
}
};