最长上升子序列
int LIS(int n){
int idx = 0;
dp[idx ++] = arr[0];
for(int i = 1;i < n;i ++){
if(arr[i] > dp[idx - 1]) dp[idx ++] = arr[i];
else{
int where = lower_bound(dp,dp + idx,arr[i]) - dp;
dp[where] = min(dp[where],arr[i]);
}
}
return idx;
}
本文介绍了一种求解最长上升子序列(LIS)问题的有效算法。通过动态规划思想结合二分查找技巧,该算法能够在O(n log n)的时间复杂度内找到给定数组中最长的递增子序列。
1457

被折叠的 条评论
为什么被折叠?



