基于动态规划的思想
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<unordered_map>
using namespace std;
int main() {
int arr[] = { 2,1,4,3,1,5,6};
int len[8]; //数组各元素表示,以arr[i]为结尾的序列,递增子序列最长长度
int max_val = 1;
for (int i = 0; i < 8; i++) {
len[i] = 1;//以本元素为结尾的序列,子序列最短的长度就是其本身的长度
for (int j = 0; j < i; ++j) {
if (arr[j] < arr[i] && len[i] < len[j]+1)//当前面的元素小于结尾的元素时才有增加的可能
len[i] = len[j] + 1;
}
max_val = max(max_val, len[i]);
}
cout<< max_val;
return 0;
}
基于贪心+二分查找
#include<iostream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<unordered_map>
using namespace std;
int main() {
vector<int> arr{ 2,1,4