考察的知识点:动态规划;
解答方法分析:
- 建一个动态规划数组dp,dp[i]表示以第i个种子结尾的最长连续生长速度递减的种子序列的长度。
- 初始化dp数组的所有元素为1,因为每个种子都可以单独构成一个长度为1的递减序列。
- 从第二个种子开始遍历,对于每个种子i,计算dp[i]的值:如果seeds[i]的生长速度小于seeds[i-1]的生长速度,则dp[i]值为dp[i-1]+1。否则,dp[i]的值为1。
- 遍历dp数组,找到其中的最大值,即为最长的连续生长速度递减的种子序列的长度。
- 返回最长长度
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param seeds int整型vector * @return int整型 */ int lengthOfLIS(vector<int>& seeds) { int n = seeds.size(); vector<int> dp(n, 1); int maxLength = 1; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (seeds[i] < seeds[j] && dp[j] + 1 > dp[i]) { dp[i] = dp[j] + 1; maxLength = max(maxLength, dp[i]); } } } return maxLength; } };