📜  最长递增子序列的Java程序(1)

📅  最后修改于: 2023-12-03 14:55:23.532000             🧑  作者: Mango

最长递增子序列的Java程序

最长递增子序列(Longest Increasing Subsequence)是指给定一个未排序的整数数组,找到其中最长的递增子序列的长度。下面是一个使用动态规划算法解决最长递增子序列问题的Java程序示例。

动态规划算法

动态规划是一种常用的算法思想,用于解决最优化问题。在最长递增子序列问题中,使用动态规划算法可以通过子问题的最优解来求解原问题的最优解。

动态规划算法解决最长递增子序列问题的基本思路如下:

  1. 定义一个数组dp,其中dp[i]表示以第i个元素结尾的最长递增子序列的长度。
  2. 初始化dp数组为1,因为每个元素本身就构成一个长度为1的递增子序列。
  3. 对于每个元素nums[i],遍历它之前的所有元素nums[j],如果nums[i] > nums[j],则更新dp[i] = Math.max(dp[i], dp[j] + 1)
  4. 遍历整个dp数组,找到最大的元素作为最长递增子序列的长度。

以下是使用Java实现的最长递增子序列程序示例:

public class LongestIncreasingSubsequence {
    public static int lengthOfLIS(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        Arrays.fill(dp, 1);

        for (int i = 1; i < n; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);
                }
            }
        }

        int maxLength = 0;
        for (int i = 0; i < n; i++) {
            maxLength = Math.max(maxLength, dp[i]);
        }

        return maxLength;
    }

    public static void main(String[] args) {
        int[] nums = {10, 9, 2, 5, 3, 7, 101, 18};
        int lisLength = lengthOfLIS(nums);
        System.out.println("最长递增子序列的长度为:" + lisLength);
    }
}

以上程序中,lengthOfLIS方法用于计算最长递增子序列的长度。该方法通过动态规划算法,使用dp数组记录以每个元素结尾的最长递增子序列的长度。最后,遍历dp数组找到最大值即可得到最长递增子序列的长度。

main方法中,我们定义了一个整数数组nums,并调用lengthOfLIS方法计算最长递增子序列的长度,并输出结果。

运行程序,将会得到以下输出:

最长递增子序列的长度为:4

以上程序使用动态规划算法解决了最长递增子序列问题,并且在输出结果中返回了最长递增子序列的长度。

希望对你有帮助!