当前位置: 首页> 教育> 锐评 > 常德论坛市民留言尚一网_软件开发项目风险有哪些_lol关键词查询_建站服务

常德论坛市民留言尚一网_软件开发项目风险有哪些_lol关键词查询_建站服务

时间:2025/7/10 1:21:29来源:https://blog.csdn.net/aaal1234/article/details/144485500 浏览次数:0次
常德论坛市民留言尚一网_软件开发项目风险有哪些_lol关键词查询_建站服务

今天的是子序列问题,第二题难度不大,可以采用类似贪心的思路求解。第一题的思想比较新颖,注意dp[i]是以i为末尾元素的最长递增子序列,可以用两层循环,第二层循环遍历从0到i-1,通过不断更新dp[i]的值求解最长递增子序列,这里的思路很巧妙。

另外,第一题还可以用贪心的方法,要使子序列尽可能长,就要使每个子序列中的数尽可能小,若遇到更小的数就将其替换。可以写出如下代码:

 for(auto num:nums){auto it=ranges::lower_bound(res,num);if(it==res.end()) {res.push_back(num);}else *it=num;}return res.size();

第三题的思路和第一题类似,

   vector<vector<int>>dp(nums1.size(),vector<int>(nums2.size(),0));
//dp[i][j]表示以nums1[i],nums2[j]为末尾元素的最长子序列的长度,需要初始化为0
 if(nums1[i]==nums2[j]&&i>0&&j>0) dp[i][j]=dp[i-1][j-1]+1;

这行代码的意思是如果两个数列有数字相同,就在前面的基础上加1,因为两个数列是同步的。

这道题卡哥采用的是i-1,j-1的写法,我认为用i,j更容易理解,只是需要多一步初始化的过程同时要防止数组越界:

 for(int i=0;i<nums1.size();i++) if(nums1[i]==nums2[0])dp[i][0]=1;for(int j=0;j<nums2.size();j++) if(nums2[j]==nums1[0]) dp[0][j]=1;

先处理完第一行,再处理后面的。

关键字:常德论坛市民留言尚一网_软件开发项目风险有哪些_lol关键词查询_建站服务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: