题解 | #递减种子序列#
递减种子序列
https://www.nowcoder.com/practice/708a3a8603274fc7b5732c5e73617203?tpId=354&tqId=10595678&ru=/exam/company&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Fcompany
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param seeds int整型一维数组 * @return int整型 */ public int lengthOfLIS (int[] seeds) { // write code here int n = seeds.length; int[] dp = new int[n]; // 用于记录以每个种子为结尾的最长递减序列的长度 // 初始情况,每个种子都至少可以形成长度为 1 的递减序列 for (int i = 0; i < n; i++) { dp[i] = 1; } int maxLength = 1; // 记录最长递减序列的长度 for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (seeds[i] < seeds[j]) { dp[i] = Math.max(dp[i], dp[j] + 1); // 更新以当前种子结尾的最长递减序列长度 } } maxLength = Math.max(maxLength, dp[i]); // 更新最长递减序列的长度 } return maxLength; } }
知识点:
- 动态规划:一种通过将问题分解成子问题,并存储子问题的解来解决问题的方法。
- 最长递减子序列问题:在给定序列中,找到一个递减的子序列,使其长度最长。
解题思路:
使用了一个动态规划数组 dp 来记录以每个种子为结尾的最长递减序列的长度。通过迭代填充这个数组,我们可以计算出最长递减序列的长度。最终,我们返回最长递减序列的长度。
总之,这个问题涉及到了动态规划的应用,以及对最长递减子序列问题的求解方法。